لمحة عن الصور المخصّصة

الشاشة المُثقوبة هي منطقة على بعض الأجهزة تمتد إلى سطح الشاشة. ويسمح هذا التصميم بتجربة ملء الشاشة مع توفير مساحة ل أجهزة الاستشعار المهمة في مقدمة الجهاز.

مثال على اقتصاص صورة في الوضع العمودي
الشكل 1. مثال على اقتصاص صورة في وضع "بورتريه"
مثال على لقطة شاشة تم اقتصاصها في الوضع الأفقي
الشكل 2. مثال على اقتصاص الصورة في الوضع الأفقي

يتيح نظام التشغيل Android استخدام أجزاء الشاشة المُخصّصة للكاميرا على الأجهزة التي تعمل بالإصدار 9 من Android (المستوى 28 من واجهة برمجة التطبيقات) والإصدارات الأحدث. ومع ذلك، يمكن لصنّاع الأجهزة أيضًا توفير ميزة "فتحات الشاشة" على الأجهزة التي تعمل بالإصدار 8.1 من نظام التشغيل Android أو إصدارات أقدم.

توضِّح هذه الصفحة كيفية توفير إمكانية استخدام التطبيقات على الأجهزة التي تتضمّن مساحة مخصّصة للكاميرا الأمامية في Compose، بما في ذلك كيفية التعامل مع مساحة الفتحة، أي المستطيل الذي يمتد من الحافة إلى الحافة على سطح الشاشة ويحتوي على الفتحة.

الحالة التلقائية

لن ترسم التطبيقات التي تستهدِف المستوى 34 من واجهة برمجة التطبيقات أو الإصدارات الأقدم، أو الأنشطة التي لا تستدعي enableEdgeToEdge، في منطقة الفتحة تلقائيًا ما لم ترسم التطبيق في شريط نظام يحتوي على الفتحة.

ترسم التطبيقات التي تستهدف المستوى 35 أو أعلى لواجهة برمجة التطبيقات على الأجهزة التي تعمل بالإصدار 15 من Android أو الإصدارات الأحدث، أو الأنشطة التي تستدعي enableEdgeToEdge، في منطقة الفتحة.

بعبارة أخرى، يتم تفسير LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT و LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES و LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER على أنّها LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS للنوافذ غير العائمة في التطبيقات التي تستهدف المستوى 35 من واجهة برمجة التطبيقات أو أعلى على الأجهزة التي تعمل بنظام Android 15 أو الإصدارات الأحدث.

التعامل مع معلومات الاقتصاص يدويًا

يجب التعامل مع معلومات الفتحة لمنع حجب النص أو عناصر التحكّم أو العناصر التفاعلية المهمة التي تتطلّب دقة في التعرّف على اللمس (قد تكون حساسية اللمس أقل في منطقة الفتحة). عند التعامل مع العناصر المخصّصة للعرض، لا تضبط ارتفاع شريط الحالة بشكل ثابت، لأنّ ذلك قد يؤدي إلى تداخل المحتوى أو اقتطاعه. بدلاً من ذلك، يمكنك التعامل مع العناصر المُقتطعة بأيّ من الطرق التالية:

بالنسبة إلى ميزة "الإنشاء"، ننصحك باستخدام displayCutout أو safeContent أو safeDrawing للتعامل مع العناصر المُدمجة المُقتطعة في العناصر القابلة للإنشاء. يتيح لك هذا النهج مراعاة مساحة الحشو في فتحة الشاشة عند الحاجة، أو تجاهلها عندما لا يكون ذلك ضروريًا.

Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) {
    drawRect(Color.Red, style = Stroke(2.dp.toPx()))
}