لمحة عن الأجزاء المُدمَجة في النوافذ

تتولّى منصة Android مسؤولية رسم واجهة مستخدم النظام، مثل شريط الحالة وشريط التنقّل. تظهر واجهة مستخدم النظام هذه بغض النظر عن التطبيق الذي يستخدمه المستخدم.

تقدّم WindowInsets معلومات حول واجهة مستخدم النظام لضمان رسم تطبيقك في المساحة الصحيحة وعدم حجب واجهة المستخدم بواسطة واجهة مستخدم النظام.

الانتقال من الحافة إلى الحافة للرسم خلف أشرطة النظام
الشكل 1. عرض المحتوى من الحافة إلى الحافة للرسم خلف أشرطة النظام

في نظام التشغيل Android 14 (المستوى 34 لواجهة برمجة التطبيقات) والإصدارات الأقدم، لا يتم تلقائيًا عرض واجهة المستخدم لتطبيقك أسفل أشرطة النظام وفتحات الشاشة.

على الإصدار Android 15 (المستوى 35 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يرسم تطبيقك أسفل أشرطة النظام وفتحات الشاشة بعد أن يستهدف الإصدار 35 من حزمة تطوير البرامج (SDK). ويؤدي ذلك إلى توفير تجربة أكثر سلاسة للمستخدمين، كما يتيح لتطبيقك الاستفادة الكاملة من مساحة النافذة المتاحة له.

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

أساسيات Inset

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

يتم تحديد حجم واجهة مستخدم النظام والمعلومات المتعلقة بمكان وضعها من خلال الحواف الداخلية.

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

تتوفّر أنواع الحواف المدمَجة في Android من خلال WindowInsets:

WindowInsets.statusBars

الحواف الداخلية التي تصف أشرطة الحالة وهي أشرطة واجهة مستخدم النظام الرئيسية التي تحتوي على رموز الإشعارات والمؤشرات الأخرى.

WindowInsets.statusBarsIgnoringVisibility

حواف شريط الحالة عندما يكون مرئيًا إذا كانت أشرطة الحالة مخفية حاليًا (بسبب الدخول إلى وضع ملء الشاشة الغامر)، ستكون هوامش شريط الحالة الرئيسي فارغة، ولكن لن تكون هذه الهوامش فارغة.

WindowInsets.navigationBars

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

WindowInsets.navigationBarsIgnoringVisibility

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

WindowInsets.captionBar

الحافة الداخلية التي تصف زخرفة نافذة واجهة مستخدم النظام إذا كانت في نافذة ذات شكل حر، مثل شريط العنوان العلوي

WindowInsets.captionBarIgnoringVisibility

تُستخدَم هذه السمة لتحديد المسافة البادئة لشريط الترجمة والشرح عندما يكون مرئيًا. إذا كانت أشرطة الترجمة والشرح مخفية حاليًا، ستكون هوامش شريط الترجمة والشرح الرئيسي فارغة، ولكن لن تكون هذه الهوامش فارغة.

WindowInsets.systemBars

اتحاد هوامش إدخال شريط النظام، والتي تشمل أشرطة الحالة وأشرطة التنقّل وشريط العنوان

WindowInsets.systemBarsIgnoringVisibility

حواف شريط النظام عندما تكون مرئية إذا كانت أشرطة النظام مخفية حاليًا (بسبب الدخول إلى وضع ملء الشاشة الغامر)، ستكون هوامش الإدخال الرئيسية لشريط النظام فارغة، ولكن لن تكون هوامش الإدخال هذه فارغة.

WindowInsets.ime

تمثّل هذه السمة المساحات الداخلية التي تصف مقدار المساحة في أسفل الشاشة التي تشغلها لوحة المفاتيح البرمجية.

WindowInsets.imeAnimationSource

تشير هذه السمة إلى المساحات الداخلية التي تصف مقدار المساحة التي شغلتها لوحة المفاتيح البرمجية قبل حركة لوحة المفاتيح الحالية.

WindowInsets.imeAnimationTarget

تمثّل هذه السمة المساحات الداخلية التي تصف مقدار المساحة التي ستشغلها لوحة المفاتيح البرمجية بعد اكتمال الحركة الحالية للوحة المفاتيح.

WindowInsets.tappableElement

نوع من الحواف الداخلية يصف معلومات أكثر تفصيلاً حول واجهة مستخدم التنقّل، ويحدّد مقدار المساحة التي سيتعامل فيها النظام مع "النقرات" وليس التطبيق. بالنسبة إلى أشرطة التنقّل الشفافة التي تستخدم التنقّل بالإيماءات، يمكن النقر على بعض عناصر التطبيق من خلال واجهة مستخدم التنقّل في النظام.

WindowInsets.tappableElementIgnoringVisibility

تُستخدَم هذه السمة لتحديد المسافات البادئة للعنصر القابل للنقر عندما يكون مرئيًا. إذا كانت العناصر القابلة للنقر مخفية حاليًا (بسبب الدخول إلى وضع ملء الشاشة الغامر)، ستكون هوامش العنصر الرئيسي القابل للنقر فارغة، ولكن لن تكون هذه الهوامش فارغة.

WindowInsets.systemGestures

تمثّل هذه السمة مقدار المساحات الداخلية التي سيحظر فيها النظام الإيماءات المخصّصة للتنقّل. يمكن للتطبيقات تحديد طريقة التعامل مع عدد محدود من هذه الإيماءات يدويًا من خلال Modifier.systemGestureExclusion.

WindowInsets.mandatorySystemGestures

مجموعة فرعية من إيماءات النظام التي سيتعامل معها النظام دائمًا، ولا يمكن إيقافها من خلال Modifier.systemGestureExclusion.

WindowInsets.displayCutout

تمثّل هذه الحواف مقدار المسافة المطلوبة لتجنُّب التداخل مع الصورة المقطوعة للشاشة (القطع العلوي أو الثقب).

WindowInsets.waterfall

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

يتم تلخيص هذه الأنواع من خلال ثلاثة أنواع من الحواف الداخلية "الآمنة" التي تضمن عدم حجب المحتوى:

تحمي أنواع الحواف الداخلية "الآمنة" المحتوى بطرق مختلفة، استنادًا إلى الحواف الداخلية الأساسية للنظام الأساسي:

  • استخدِم WindowInsets.safeDrawing لحماية المحتوى الذي لا يجب عرضه تحت أي واجهة مستخدم للنظام. هذا هو الاستخدام الأكثر شيوعًا للحواف الداخلية: لمنع رسم المحتوى الذي تحجبه واجهة مستخدم النظام (سواء جزئيًا أو كليًا).
  • استخدِم WindowInsets.safeGestures لحماية المحتوى باستخدام الإيماءات. يؤدي ذلك إلى تجنُّب تعارض إيماءات النظام مع إيماءات التطبيق (مثل الإيماءات الخاصة بأوراق البيانات السفلية أو اللوحات الدوّارة أو الألعاب).
  • استخدِم WindowInsets.safeContent كمزيج من WindowInsets.safeDrawing وWindowInsets.safeGestures لضمان عدم تداخل المحتوى المرئي وعدم تداخل الإيماءات.