وضع التوافق مع الجهاز

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

تتيح عمليات إلغاء الإعدادات على مستوى التطبيق لصنّاع الأجهزة تغيير سلوك التطبيقات لتحسين تجربة المستخدم أو منع تعطُّل التطبيقات على أجهزة معيّنة.

الأجهزة المرجعية

قد تتطلّب الأجهزة التالية إلغاء الإعدادات التلقائية لكل تطبيق بسبب إعدادات غير معتادة أو إعدادات لا تتوافق بشكل جيد مع التطبيقات:

  • أجهزة التابلت: الاتجاه الطبيعي لبعض أجهزة التابلت، مثل Pixel Tablet، هو الوضع الأفقي. يكون الجهاز في اتجاهه الطبيعي عندما يعود رمز Display#getRotation() إلى Surface.ROTATION_0. إذا كانت التطبيقات تفترض أنّ ROTATION_0 في الوضع العمودي، قد لا تتطابق تنسيقات التطبيقات ومعاينة الكاميرا مع شاشة الجهاز.
  • الأجهزة القابلة للطي بالوضع الأفقي: تكون بعض الأجهزة القابلة للطي، مثل Pixel Fold، في الوضع عمودي عند طيها، ولكن في الوضع الأفقي عند فتحها. إذا كانت التطبيقات تفترض أنّ الاتجاه العمودي هو الاتجاه المُفترَض للشاشة المفتوحة، من المرجّح حدوث وميض حلقات أو مشاكل في التنسيق.
  • الهواتف الجوّالة القابلة للطيّ: تكون الهواتف الجوّالة القابلة للطيّ عادةً في الوضع العمودي. ولكن عند طيّ الهواتف، تظهر عادةً شاشة صغيرة في الوضع المُسطّح. يجب أن تتعرّف التطبيقات على مختلف اتجاهات الشاشات وتتكيّف معها.

المشاكل الشائعة المتعلّقة بالتوافق

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

ليتيربوكسينغ

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

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

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

المشكلة

لا يتيح التطبيق جميع إعدادات العرض لأنّه يحتوي على اتجاه ثابت أو نسبة عرض إلى ارتفاع ثابتة أو لا يمكن تغيير حجمه.

تشمل إعدادات الضبط التي تتحكّم في اتجاه التطبيق وإمكانية تغيير حجمه ما يلي:

  • screenOrientation: لتحديد اتجاه ثابت لتطبيق، ويمكن للتطبيقات أيضًا ضبط الاتجاه أثناء التشغيل باستخدام Activity#setRequestedOrientation().

  • resizeableActivity: يشير إلى ما إذا كان بإمكان النظام تغيير حجم التطبيقات لتلائم النوافذ ذات الأبعاد المختلفة. في الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) والإصدارات الأقدم، يحدِّد هذا الخيار ما إذا كانت التطبيقات تتيح وضع "النوافذ المتعددة". في الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يحدِّد هذا الإعداد ما إذا كانت التطبيقات تتوافق مع وضع "النوافذ المتعددة" على الشاشات الصغيرة (فئة حجم النافذة المدمجة). على نظام التشغيل Android 12 والإصدارات الأحدث، تسمح التطبيقات باستخدام وضع "تعدد النوافذ" على الشاشات الكبيرة (فئة حجم النافذة متوسطة أو موسّعة) بغض النظر عن هذا الإعداد.

  • maxAspectRatio: لتحديد الحد الأقصى لنسبة العرض إلى الارتفاع التي يتوافق معها التطبيق. يمكن فقط للتطبيقات التي تم ضبط resizeableActivity فيها على false ضبط maxAspectRatio.

  • minAspectRatio: لتحديد الحد الأدنى لنسبة العرض إلى الارتفاع التي يتوافق معها التطبيق. يمكن فقط للتطبيقات التي تم ضبط resizeableActivity فيها على false ضبط minAspectRatio.

تحسين

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

حلّ بديل للتوافق

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

بدءًا من الإصدار 12 من Android (المستوى 31 لواجهة برمجة التطبيقات) والإصدار 12L (المستوى 32 لواجهة برمجة التطبيقات)، يطبّق النظام الأساسي مجموعة متنوعة من التحسينات على التطبيقات التي تستخدم إطارًا عريضًا أفقيًا. ينفّذ المصنّعون التحسينات على واجهة المستخدم. لست بحاجة إلى إجراء أي عملية تطوير إضافية لتطبيقك للاستفادة من التحسينات.

يقدّم نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) التحسينات الجمالية التالية التي يمكن لشركات تصنيع الأجهزة ضبطها:

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

الشكل 2: تطبيق مُعدّ للعرض على شاشة عريضة أفقيًا مع تحسينات على واجهة المستخدم

يضيف الإصدار 12L (المستوى 32 لواجهة برمجة التطبيقات) التحسينات الوظيفية التالية:

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

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

يضيف الإصدار 13 من نظام التشغيل Android (المستوى 33 لواجهة برمجة التطبيقات) مربّع حوار تعليميًا للمستخدمين حول موضع تطبيق مربّع الإطار على الشاشة أو تضمين مربّع الإطار في وضع تقسيم الشاشة:

الشكل 3: تطبيق مُعدّ للعرض على شاشة عريضة أفقيًا مع مربّع حوار يوضّح معلومات للمستخدم

وضع التوافق مع الحجم

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

تشمل تغييرات إعدادات الجهاز التي يمكن أن تؤدي إلى تفعيل وضع التوافق مع الحجم ما يلي:

  • تدوير الجهاز
  • جهاز قابل للطي يتم فتحه أو طيّه
  • التبديل بين وضعَي العرض "ملء الشاشة" و"تقسيم الشاشة"

المشكلة

ينطبق وضع التوافق مع الحجم عادةً على الأنشطة التي يتم تقييدها من حيث الاتجاه أو نسبة العرض إلى الارتفاع ويتم ضبطها (أو تحديدها من قِبل النظام) لتكون غير قابلة للتغيير.

يُعتبَر تطبيقك قابلاً لتغيير الحجم، ولن يتم وضعه في وضع ملفه المتوافق مع مختلف الأحجام، إذا كان يستوفي أيًا من المعايير التالية:

إذا لم يستوفِ تطبيقك أيًا من الشروط، سيتم اعتباره غير قابل للتغيير وسيتم وضعه في وضع التوافق مع الحجم.

تحسين

يجب أن يكون التطبيق متوافقًا مع جميع أحجام الشاشات. يمكنك جعل تطبيقك قابلاً للتغيير من خلال ضبط سمة android:resizeableActivity لعنصر <activity> أو <application> على true فيملف بيان التطبيق. تصميم تنسيقات سريعة الاستجابة/التكيّف لتطبيقك. لمزيد من المعلومات، يُرجى الاطّلاع على إتاحة أحجام شاشات مختلفة وإتاحة وضع "النوافذ المتعددة".

حلّ بديل للتوافق

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

حلقات وميض

عندما لا يتيح التطبيق جميع أوضاع العرض، قد يطلب مراراً أوضاع عرض جديدة عند حدوث تغيير في الإعدادات، ما يؤدي إلى بدء حلقة بدورة أبدية تؤدي إلى وميض الشاشة أو تدوير التطبيق بلا نهاية.

المشكلة

في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن لصنّاع الأجهزة ضبط أجهزتهم لتجاهل قيود الوضع المحدّدة من قِبل التطبيقات، وبدلاً من ذلك فرض أوضاع التوافق. على سبيل المثال، يمكن أن يتجاهل الجهاز القابل للطي أحد إعدادات android:screenOrientation="portrait" النشاط عند عرض النشاط على الشاشة الداخلية للجهاز التي تكون بحجم الجهاز اللوحي في الوضع الأفقي.

في حال تجاهل قيود الاتجاه في التطبيق، يمكن للتطبيق تحديد اتجاهه آليًا من خلال استدعاء Activity#setRequestedOrientation(). يؤدي الاتصال إلى إعادة تشغيل التطبيق إذا لم يكن التطبيق يعالج تغييرات الإعدادات (راجِع معالجة تغييرات الإعدادات). بعد إعادة التشغيل، يتم تجاهل قيود الاتجاه في التطبيق مرة أخرى، ويكرّر التطبيق طلب setRequestedOrientation()، ويؤدي الطلب إلى إعادة تشغيل التطبيق، ويستمر ذلك في حلقة متكررة.

قد تواجه هذا الخطأ أيضًا عندما يكون الاتجاه الطبيعي (الاتجاه المعتاد الذي يحدده Android) لشاشة الجهاز هو الوضع الأفقي (أي أنّه عند استدعاء رمز Display#getRotation()، يتم عرض Surface.ROTATION_0 بينما يكون للجهاز نسبة اتّجاه عمودي/أفقي في الوضع الأفقي). في السابق، كانت التطبيقات تفترض أنّ الرمز Display.getRotation() = Surface.ROTATION_0 يعني أنّ الجهاز في الوضع العمودي، ولكن ليس هو الحال دائمًا، على سبيل المثال، على الشاشة الداخلية لبعض الأجهزة القابلة للطي وعلى بعض الأجهزة اللوحية.

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

تحسين

يجب عدم تنفيذ التطبيقات لما يلي:

  • يمكنك ضبط اتجاه تلقائي باستخدام Activity#setRequestedOrientation() في onCreate()method activity لأنّه يمكن أن يتم بدء طلب الاتجاه بشكل غير متوقّع بسبب تغييرات الإعدادات غير المحمولة
  • افترض أنّ الوضع الطبيعي للجهاز (ROTATION_0) هو الوضع العمودي.
  • اضبط الاتجاه استنادًا إلى إشارات غير مرتبطة بحجم النافذة الحالي، مثل Display#getRotation() أو وجود FoldingFeature أو واجهات برمجة تطبيقات متوقّفة نهائيًا.

حلّ بديل للتوافق

يتجاهل Android طلبات الاتصال بـ Activity#setRequestedOrientation() في الحالات التالية:

  • سبق أن تم إعادة تشغيل النشاط من طلب سابق للطريقة أو تم تفعيل معالجة فرض التدوير المتوافق مع الكاميرا (راجِع معاينة الكاميرا أدناه).

    يمكن لمصنعي الأجهزة تطبيق هذا السلوك على تطبيق باستخدام OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION.

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

    يمكن لمصنعي الأجهزة تطبيق هذا السلوك على تطبيق باستخدام OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED.

معاينة الكاميرا

يمكن أن تكون معاينة الكاميرا (أو عدسة الكاميرا) في تطبيقات الكاميرا غير متوافقة أو مشوهة على الأجهزة اللوحية وأجهزة الكمبيوتر المحمول والشاشات القابلة للطي.

المشكلة

ينص مستند تعريف التوافق مع Android على أنّه "يجب توجيه كاميرا رصد الصور بحيث يكون الجانب الطويل من الكاميرا ALIGNED مع الجانب الطويل من الشاشة".

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

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

تحسين

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

حلّ بديل للتوافق

يكون الجهاز في الوضع الطبيعي عندما يعرض Display#getRotation() Surface.ROTATION_0. يحسب النظام CameraCharacteristics.SENSOR_ORIENTATION من الاتجاه الطبيعي للجهاز. ينسِّق نظام التشغيل Android نافذة الوضع العمودي للتطبيقات المخصّصة للوضع العمودي مع الاتجاه الطبيعي للجهاز، وهو ما تتوقّعه معظم التطبيقات. يقطع نظام التشغيل Android أيضًا صورة أداة استشعار الكاميرا عندما يكون اتجاه أداة الاستشعار أفقيًا ومعاينة الكاميرا عمودية. تشمل الحلول البديلة المتعلّقة بالملف الشخصي على Google ما يلي:

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

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

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

    على الشاشة الداخلية بالوضع الأفقي للأجهزة القابلة للطي (راجِع أجهزة المرجعية)، يتم تدوير الأنشطة بالوضع العمودي فقط إلى الوضع الافقي لمواءمة الوضع الطبيعي للشاشة المفتوحة. يتم عرض التطبيق في شاشة عريضة أفقيًا بعد فرض تغيير الاتجاه.

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

  • فرض إعادة تحميل معاينات الكاميرا: ينتقل النظام بين onStop() وonStart() (تلقائيًا) أو onPause() وonResume() (يتم تطبيقهما من خلال القيمة البديل المُحدَّدة في OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE لكل تطبيق) بعد فرض التدوير للتأكّد من أنّ معاينة الكاميرا يتم عرضها بشكلٍ سليم.

  • تصغير نسبة العرض إلى الارتفاع: يغيّر النظام ديناميكيًا نسبة العرض إلى الارتفاع في معاينة الكاميرا التي تم فرض تدويرها إلى الحد الأدنى الأعلى لنسبة العرض إلى الارتفاع، ما يضمن تصغير معاينة الكاميرا بشكل صحيح.

يمكن لمطوّري التطبيقات إلغاء هذه الحلول البديلة إذا كانت التطبيقات تعالج معاينة الكاميرا بشكل صحيح. راجِع عمليات إلغاء الإعدادات على مستوى التطبيق.

واجهات برمجة التطبيقات التي يتم إساءة استخدامها بشكل شائع

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

تم تصميم بعض واجهات برمجة التطبيقات View لأغراض خاصة لا يفهمها المطوّرون جيدًا في بعض الأحيان.

المشكلة

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

واجهات برمجة التطبيقات Display API التي تم إيقافها نهائيًا والتي يتم إساءة استخدامها بشكل شائع:

لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إتاحة وضع "النوافذ المتعددة".

استخدام واجهات برمجة تطبيقات العرض بشكل غير صحيح:

تحسين

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

حلّ بديل للتوافق

هناك طريقتان لتعديل واجهات برمجة التطبيقات Display المتوقّفة نهائيًا وواجهات برمجة التطبيقات View التي تم إساءة استخدامها لمحاولة عرض حدود التطبيق: ALWAYS_SANDBOX_DISPLAY_APIS لواجهات برمجة التطبيقات Display وOVERRIDE_SANDBOX_VIEW_BOUNDS_APIS لواجهات برمجة التطبيقات View. يتم أيضًا تطبيق ALWAYS_SANDBOX_DISPLAY_APIS تلقائيًا على التطبيقات المؤهَّلة لاستخدام وضع التوافق مع الحجم.

الأنشطة الشفافة

الأنشطة الشفافة هي نتيجة أنماط الخلفية الشفافة، على سبيل المثال:

<style name="Transparent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

يمكن أن تتضمّن المظاهر ذات الصلة بمربّعات الحوار، مثل Theme.MaterialComponents.Dialog، أنماطًا تجعل الأنشطة شفافة.

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

المشكلة

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

تحسين

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

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

يجب أن تطلب التطبيقات دائمًا الأذونات من الأنشطة التي تظل مرئية إلى أن يتّخذ المستخدم قرارًا بشأنها.

زوايا دائرية

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

لا تملأ مربّعات حوار الأذونات مساحة العرض المتاحة لأنّ تنسيق مربّع الحوار يستخدم عادةً LayoutParams.WRAP_CONTENT بدلاً من LayoutParams.MATCH_PARENT.

حلّ بديل للتوافق

يجب إبقاء الأنشطة التي تنشئ أنشطة مربّعات الحوار مرئية إلى أن يردّ المستخدم على مربّع الحوار.

يضمن النظام أن يكتسب النشاط الشفاف جميع القيود من النشاط غير الشفاف الأول أسفل النشاط الشفاف في حزمة الأنشطة، بما في ذلك القيود المتعلقة بما يلي:

  • وضع التوافق مع الحجم
  • الاتجاه
  • نسبة العرض إلى الارتفاع

ألعاب Unity

يتم تشغيل ألعاب Unity على Android بملء الشاشة أو في وضع النوافذ المتعدّدة. ومع ذلك، تفقد العديد من ألعاب Unity التركيز وتتوقف عن رسم المحتوى عند وضع التطبيق في وضع "النوافذ المتعددة".

المشكلة

أضافت Unity خيار Resizable Window في Unity 2019.4 لإتاحة وضع "النوافذ المتعددة" على Android. ومع ذلك، لم يستجِب التنفيذ الأولي لمراحل نشاط التطبيقات في وضع النوافذ المتعدّدة بشكل صحيح، ما أدّى إلى تعليق UnityPlayer للتشغيل عندما يفقد التطبيق التركيز. عرض المشغّل شاشة سوداء أو آخر لقطة متوقّفة للّعبة. لم تتم استعادة أسلوب اللعب إلا عندما نقر المستخدم على الشاشة. تواجه العديد من التطبيقات التي تستخدم محرّك Unity هذه المشكلة، ويتم عرضها كنافذة سوداء في وضع "النوافذ المتعددة".

تحسين

عليك ترقية Unity إلى الإصدار 2019.4.40 أو إصدار أحدث وإعادة تصدير لعبتك. احرص على وضع علامة في المربّع بجانب الخيار Resizable Window في إعدادات مشغّل Android، وإلا ستتوقف اللعبة مؤقتًا عندما لا تكون في المقدّمة حتى لو كانت مرئية بالكامل في وضع "النوافذ المتعددة".

حلّ بديل للتوافق

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

اختبار تطبيقك بحثًا عن مشاكل التوافق

لاختبار تطبيقك ومعرفة سلوكه على أشكال الأجهزة المختلفة، يمكنك الاستفادة من المراجع التالية:

مُعد للعرض على شاشة عريضة أفقيًا

تأكَّد من أنّ كل نشاط يمكنه استخدام كل مساحة العرض المتاحة للتطبيق. أولاً، أدخِل الرمز التالي في مجلد الاختبار:

Kotlin

fun Activity.isLetterboxed() : Boolean {
    if (isInMultiWindowMode) return false

    val wmc = WindowMetricsCalculator.getOrCreate()
    val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds
    val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds

    val isScreenPortrait = maxBounds.height() > maxBounds.width()

    return if (isScreenPortrait) {
        currentBounds.height() < maxBounds.height()
    } else {
        currentBounds.width() < maxBounds.width()
    }
}

Java

public boolean isLetterboxed(Activity activity) {
    if (activity.isInMultiWindowMode()) {
        return false;
    }

    WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate();
    Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds()
    Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds();

    boolean isScreenPortrait = maxBounds.height() > maxBounds.width();

    return (isScreenPortrait)
        ? currentBounds.height() < maxBounds.height()
        : currentBounds.width() < maxBounds.width();
}

بعد ذلك، أجرِ اختبارًا لتأكيد السلوك وتأكَّد من أنّ النشاط المستهدَف ليس معدًّا للعرض على شاشة عريضة أفقيًا:

Kotlin

@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)

@Test
fun activity_launched_notLetterBoxed() {
    activityRule.scenario.onActivity {
        assertThat(it.isLetterboxed()).isFalse()
    }
}

Java

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) {
        scenario.onActivity(activity -> {
            assertThat(isLetterboxed(activity)).isFalse();
        });
    }
}

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

عمليات إلغاء الإعدادات لكل تطبيق

يقدّم نظام التشغيل Android إعدادات إلغاء تُغيّر السلوك الذي تم ضبطه للتطبيقات. على سبيل المثال، يوجّه العنصر الفائق FORCE_RESIZE_APP النظام إلى تجاوز وضع التوافق مع الحجم وتغيير حجم التطبيق ليناسب سمات الشاشة حتى إذا تم تحديد resizeableActivity="false" في بيان التطبيق.

تُطبِّق شركات تصنيع الأجهزة عمليات إلغاء على تطبيقات محدّدة أو على جميع التطبيقات على أجهزة شاشة كبيرة معيّنة. في الإصدار Android 14 (المستوى 34 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن للمستخدمين تطبيق عمليات إلغاء على التطبيقات من خلال إعدادات الجهاز.

إلغاءات المستخدم لكل تطبيق

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

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

يمكن للتطبيقات إيقاف ميزة إلغاء التوافق من خلال ضبط علامات PackageManager.Property التالية:

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

    لإيقاف إلغاء التوافق مع نسبة العرض إلى الارتفاع للمستخدم، أضِف السمة إلى ملف بيان تطبيقك واضبط القيمة على false:

    <application>
        <property
            android:name="android.window.
            PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE"
            android:value="false" />
    </application>
    

    سيتم استبعاد تطبيقك من قائمة التطبيقات في إعدادات الجهاز. لن يتمكّن المستخدمون من إلغاء نسبة العرض إلى الارتفاع في التطبيق.

    لن يكون لضبط السمة على true أي تأثير.

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    لإيقاف خيار ملء الشاشة في ميزة "عدم التوافق مع نسبة العرض إلى الارتفاع" التي يحدّدها المستخدم، أضِف السمة إلى ملف بيان تطبيقك واضبط القيمة على false:

    <application>
        <property
            android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE"
            android:value="false" />
    </application>
    

    تتم إزالة خيار ملء الشاشة من قائمة خيارات نسبة العرض إلى الارتفاع في إعدادات الجهاز. لن يتمكّن المستخدمون من تطبيق ميزة إلغاء العرض بملء الشاشة على تطبيقك.

    لن يكون لضبط هذه السمة على true أي تأثير.

تحسين تطبيقك لجميع الشاشات: لا تفرض قيودًا على نسبة العرض إلى الارتفاع في تطبيقك. استخدِم فئات حجم النوافذ لتتوافق مع التنسيقات المختلفة استنادًا إلى مساحة العرض المتاحة.

عمليات إلغاء الشركة المصنّعة للجهاز لكل تطبيق على حدة

يطبّق مصنعو الأجهزة عمليات إلغاء على أساس كل تطبيق على أجهزة محدّدة. قد تطبِّق الأجهزة المرجعية بعض عمليات الاستبدال على مجموعة متنوعة من التطبيقات تلقائيًا.

يمكن للتطبيقات إيقاف معظم عمليات إلغاء الإعدادات (اطّلِع على جدول عمليات إلغاء الإعدادات الخاصة بكل تطبيق أدناه).

يمكنك اختبار تطبيقك مع تفعيل أو إيقاف عمليات الاستبدال باستخدام إطار العمل المتوافق (راجِع أدوات إطار العمل المتوافق). عند تفعيل هذه الميزة، تنطبق عمليات الإلغاء على التطبيق بأكمله.

يمكنك أيضًا استخدام Android Debug Bridge (adb) لتفعيل عمليات الاستبدال أو إيقافها وتحديد عمليات الاستبدال التي تنطبق على تطبيقك.

فعِّل عمليات الاستبدال أو أوقِفها على النحو التالي:

adb shell am compat enable/disable <override name/id> <package>

بالنسبة إلى الأجهزة المرجعية، تحقَّق من عمليات الاستبدال التي تنطبق على تطبيقك:

adb shell dumpsys platform_compat | grep <package name>

يسرد الجدول التالي عمليات الإلغاء المتاحة بالإضافة إلى إرشادات حول كيفية تحسين تطبيقك كي لا يحتاج إلى الاعتماد على عمليات الإلغاء. يمكنك إضافة علامات الملكية إلى ملف بيان تطبيقك لإيقاف بعض عمليات الاستبدال.

عمليات إلغاء الإعدادات لكل تطبيق
النوع الاسم رقم التعريف الوصف
إمكانية تغيير الحجم FORCE_RESIZE_APP 174042936 يتجاوز وضع التوافق مع الحجم للتطبيق عند تغيير الإعدادات.
FORCE_NON_RESIZE_APP 181136395 فرض وضع التوافق مع الحجم على التطبيق عند تغيير الإعدادات
نسبة العرض إلى الارتفاع OVERRIDE_MIN_ASPECT_RATIO 174042980 إذن تجاوز بوابة التحكم الذي يجب تفعيله لتطبيق أي عمليات إلغاء أخرى لنسبة العرض إلى الارتفاع
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 في حال تفعيل هذه الميزة (الإعداد التلقائي)، تلغي الحدود النطاق لتصبح الأنشطة في الوضع العمودي فقط.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 تغيير الحد الأدنى لنسبة العرض إلى الارتفاع إلى 3:2
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 تغيير الحد الأدنى لنسبة العرض إلى الارتفاع إلى 16:9
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 لتغيير الحد الأدنى لنسبة العرض إلى الارتفاع لكي تلائم% 50 من حجم الشاشة (أو نسبة العرض إلى الارتفاع في وضع تقسيم الشاشة).
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 إيقاف إلغاء الحد الأدنى لنسبة العرض إلى الارتفاع حتى تظهر التطبيقات بملء الشاشة عندما يكون الجهاز في الوضع العمودي
الاتجاه OVERRIDE_ANY_ORIENTATION 265464455 يتيح هذا الخيار إلغاء أي اتجاه.
OVERRIDE_ANY_ORIENTATION_TO_USER 310816437 تتجاهل القيود المفروضة على الاتجاه وإمكانية إعادة الحجم ونسبة العرض إلى الارتفاع.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 تلغي هذه السمة الاتجاه ليصبح عموديًا عندما يكون للنشاط اتجاه غير محدّد.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 تلغي هذه السمة الاتجاه ليكون nosensor (استخدام الاتجاه الطبيعي للجهاز) عندما يكون للنشاط اتجاه غير محدّد.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 تدوير التطبيقات المخصّصة للعرض في الوضع الأفقي فقط بمقدار 180 درجة
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 حصر نطاق إلغاء ضبط الاتجاه عندما يكون التطبيق متصلاً بالكاميرا
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 ضبط الشاشة على الوضع الأفقي الثابت الطبيعي عندما تكون المهمة بملء الشاشة (بما في ذلك عند عرضها بتنسيق إطار عريض أفقي)
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 تجاهُل طلبات الاتجاه من التطبيق لتجنُّب تكرار عمليات التناوب إلى ما لا نهاية
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 تتجاهل طلبات الاتجاه المتكرّرة أثناء إعادة تشغيل نشاط. إذا رصد نظام Android أنّ أحد التطبيقات يطلب اتجاهَين جديدَين على الأقل خلال ثانية واحدة، يعتبر النظام ذلك حلقة دوران لا نهائية ويطبّق الإعدادات المُلغاة.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 يمنع وضع الصورة على شكل مستطيل أفقي من خلال إيقاف إعداد طلب تجاهل الاتجاه الذي تحدّده الشركة المصنّعة للجهاز.
واجهات برمجة التطبيقات في وضع الحماية NEVER_SANDBOX_DISPLAY_APIS 184838306 يمنع تغيير سلوك أي واجهات برمجة تطبيقات لعرض الإعلانات.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 تفرض هذه السمة على واجهات برمجة تطبيقات Display في التطبيق عرض حدود التطبيق. تعرض واجهات برمجة التطبيقات Display حدود منطقة العرض المنطقية، ولكن يفترض التطبيق أحيانًا أنّ واجهات برمجة التطبيقات Display تعرض حدود التطبيق، ما يؤدي إلى حدوث مشاكل في واجهة المستخدم.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 تفرض هذه السمة على واجهات برمجة تطبيقات View المستخدَمة في التطبيق عرض حدود التطبيق. تعرض واجهات برمجة التطبيقات View حدود منطقة العرض المنطقية، ولكن يفترض التطبيق أحيانًا أنّ واجهات برمجة التطبيقات View تعرض حدود التطبيق، ما يؤدي إلى حدوث مشاكل في واجهة المستخدم.
توافق الكاميرا OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 إيقاف ميزة "فرض التدوير" يتم تلقائيًا فرض تدوير جميع تطبيقات الكاميرا ذات الاتجاه الثابت عند فتح معاينة الكاميرا.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 إزالة إعادة التحميل القسري التلقائية التي يتم تطبيقها عند فرض تدوير معاينة الكاميرا
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 تبديل التحديث القاسي إلى تحديث خفيف عند فرض دوران معاينة الكاميرا، ما يساعد في الحفاظ على الحالة أثناء عملية الدوران القسري يُجري Android تلقائيًا عملية إعادة تحميل قوية عند إجبار دوران معاينة الكاميرا. يمكن أن تؤدي إعادة التحميل القسري إلى حدوث مشاكل في التطبيقات تؤدي إلى فقدان حالتها أو إيقافها تمامًا، وذلك استنادًا إلى كيفية تخزين التطبيقات لحالتها السابقة في ذاكرة التخزين المؤقت.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 اقتصاص ذاكرة التخزين المؤقت للصورة في الكاميرا الأمامية الداخلية في حال إيقاف ميزة "الإلغاء"، تتم إزالة الاقتصاص من الكاميرا الأمامية الداخلية وزيادة مجال رؤية معاينة الكاميرا. بشكلٍ تلقائي على بعض الأجهزة القابلة للطي (راجِع الأجهزة المرجعية)، يقطع النظام معاينة الكاميرا في جميع تطبيقات الكاميرا عند استخدام الكاميرا الأمامية الداخلية.
متنوعة OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 يمنع هذا الخيار حجب التطبيق عندما يفقد التركيز في وضع تقسيم الشاشة. ينتظر التطبيق التركيز قبل رسم محتوى التطبيق، ما قد يؤدي إلى تجميد التطبيق أو حجبه. يتيح التبديل لنظام Android إرسال حدث تركيز مزيّف إلى التطبيق، ما يشير إلى التطبيق لبدء رسم المحتوى مرة أخرى.

FORCE_RESIZE_APP

تفرض هذه السمة إمكانية تغيير حجم الحِزم التي يتم تطبيق الإعدادات التلقائية عليها. لا يؤدي ذلك إلى تغيير إمكانية وضع التطبيق في وضع "النوافذ المتعددة"، ولكنه يسمح بتغيير حجم التطبيق بدون الدخول إلى وضع التوافق مع الحجم عند تغيير حجم الشاشة.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

في بيان التطبيق، يمكنك ضبط سمة android:resizeableActivity على true أو، لسماح التطبيق بتغيير الحجم مع إيقاف وضع "النوافذ المتعددة" باستخدام android:resizeableActivity=false، يمكنك ضبط علامة البيانات الوصفية android.supports_size_changes على true.

كيفية تحسين التطبيقات

استخدِم التنسيقات المتجاوبة/التكيفية للسماح للتطبيقات بالتكيّف مع جميع أحجام الشاشات ونسَب الارتفاع إلى العرض. راجِع إتاحة أحجام شاشات مختلفة.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة وجعل التطبيق قابلاً للتغيير، اتّبِع الخطوات التالية:

adb shell am compat enable FORCE_RESIZE_APP <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable FORCE_RESIZE_APP <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

FORCE_NON_RESIZE_APP

يفرض هذا الخيار على الحِزم التي يتم تطبيق التجاوز عليها أن تكون غير قابلة للتغيير ويؤدي إلى دخولها في وضع التوافق مع الحجم عند تغيير الإعدادات.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط كلّ من سمة android:resizeableActivity وعلامةandroid.supports_size_changes البيانات الوصفية على false في ملف بيان التطبيق، وأدخِل قيودًا على الاتجاه أو نسبة العرض إلى الارتفاع.

كيفية تحسين التطبيقات

يجب ضبط كل التطبيقات التي تعمل بشكل جيد عند تغيير حجمها على android:resizeableActivity أو android.supports_size_changes على true. يجب تحسين التطبيقات الأخرى لتعمل بشكل جيد عند تغيير حجمها. راجِع android:resizeableActivity.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة وجعل التطبيق غير قابل للتغيير، اتّبِع الخطوات التالية:

adb shell am compat enable FORCE_NON_RESIZE_APP <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable FORCE_NON_RESIZE_APP <package>

ملاحظة: لا تُطبِّق الأوامر إلغاء الإعدادات إلا مؤقتًا أو تزيله.

OVERRIDE_MIN_ASPECT_RATIO

عنصر التحكّم في جميع عمليات الاستبدال التي تفرض حدًا أدنى معيّنًا لنسبة العرض إلى الارتفاع

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط android:minAspectRatio على مستوى النشاط أو التطبيق.

كيفية تحسين التطبيقات

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

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

حدِّد قيدًا على نسبة العرض إلى الارتفاع أو اضبط علامة السمة PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
  android:value="false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

يفرض قيودًا على إعدادات التطبيق التي تفرض حدًا أدنى معيّنًا لنسبة العرض إلى الارتفاع للأنشطة التي تستخدم الوضع العمودي فقط. تكون مفعَّلة تلقائيًا ولا تسري إلا إذا كانت OVERRIDE_MIN_ASPECT_RATIO مفعَّلة أيضًا.

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية تحسين التطبيقات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

راجِع OVERRIDE_MIN_ASPECT_RATIO.

علامات الموقع لتعديل إلغاء الإعدادات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

ضبط الحد الأدنى لنسبة العرض إلى الارتفاع للنشاط على قيمة متوسطة (3:2)

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية تحسين التطبيقات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

راجِع OVERRIDE_MIN_ASPECT_RATIO.

علامات الموقع لتعديل إلغاء الإعدادات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

ضبط الحد الأدنى لنسبة العرض إلى الارتفاع للنشاط على قيمة كبيرة (16:9)

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية تحسين التطبيقات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

راجِع OVERRIDE_MIN_ASPECT_RATIO.

علامات الموقع لتعديل إلغاء الإعدادات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN

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

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية تحسين التطبيقات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

راجِع OVERRIDE_MIN_ASPECT_RATIO.

علامات الموقع لتعديل إلغاء الإعدادات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

ملاحظة: لا تُطبِّق الأوامر إلغاء الإعدادات إلا مؤقتًا أو تزيله.

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

إيقاف إلغاء الحد الأدنى لنسبة العرض إلى الارتفاع في وضع ملء الشاشة بالوضع العمودي لاستخدام كل مساحة الشاشة المتاحة

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية تحسين التطبيقات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

راجِع OVERRIDE_MIN_ASPECT_RATIO.

علامات الموقع لتعديل إلغاء الإعدادات

راجِع OVERRIDE_MIN_ASPECT_RATIO.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_ANY_ORIENTATION

تفعيل عمليات الإلغاء التالية لإلغاء أي اتجاه:

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط سمة البيان activity:screenOrientation، أو استخدِم واجهة برمجة التطبيقات Activity#setRequestedOrientation().

كيفية تحسين التطبيقات

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

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

ملاحظة: لا تُطبِّق الأوامر إلغاء الإعدادات إلا مؤقتًا أو تزيله.

OVERRIDE_ANY_ORIENTATION_TO_USER

يتيح للتطبيق ملء مساحة العرض المتاحة. تلغي أي قيود على الاتجاه وإمكانية إعادة الحجم ونسبة العرض إلى الارتفاع المحدّدة في بيان التطبيق. ويتم أيضًا تجاهل أي مكالمات إلى Activity#setRequestedOrientation().

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"

  • لا تضبط سمة ملف البيان android:screenOrientation أو تضبط السمة على "user".

  • اضبط سمة ملف البيان android:resizeableActivity على true.

  • على الشاشات الصغيرة، لتفعيل ميزة تغيير حجم التطبيق مع إيقاف وضع المتعدّد النوافذ باستخدام android:resizeableActivity=false، اضبط علامة البيانات الوصفية android.supports_size_changes على true. لا تضبط minAspectRatio وmaxAspectRatio.

كيفية تحسين التطبيقات

فعِّل تطبيقك ليتوافق مع جميع الاتجاهات، ولا تضبط screenOrientation مواصفات في بيان تطبيقك. يجب أن يتيح التطبيق تغيير حجمه واستخدام وضع "النوافذ المتعددة" وجميع نسب العرض إلى الارتفاع للشاشة من خلال ضبط قيمة سمة android:resizeableActivity في بيان تطبيقك على true. راجِع إتاحة أحجام شاشات مختلفة.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

علامات الموقع لتعديل إلغاء الإعدادات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

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

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية تحسين التطبيقات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

علامات الموقع لتعديل إلغاء الإعدادات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

تفعِّل ميزة التوجيه nosensor لجميع الأنشطة في الحزمة. ما لم يكن OVERRIDE_ANY_ORIENTATION مفعّلاً، لا يتم استخدام الإعدادات المُلغاة إلا إذا لم يتم تحديد اتجاه ثابت آخر من خلال النشاط.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية تحسين التطبيقات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

علامات الموقع لتعديل إلغاء الإعدادات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

تفعِّل هذه السمة اتجاه reverseLandscape لجميع الأنشطة في الحزمة. ما لم يكن OVERRIDE_ANY_ORIENTATION مفعّلاً، لا يتم استخدام الإعدادات المُلغاة إلا إذا لم يتم تحديد اتجاه ثابت آخر من خلال النشاط.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية تحسين التطبيقات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

علامات الموقع لتعديل إلغاء الإعدادات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

تحدّد الإعدادات القصوى OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT، OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR، و OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE لعدم سريان عمليات الاستبدال إلا عندما يكون اتصال الكاميرا نشطًا.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية تحسين التطبيقات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

علامات الموقع لتعديل إلغاء الإعدادات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

تقييد اتجاه العرض على الاتجاه الأفقي الطبيعي عند استيفاء الشروط التالية:

  • النشاط معروض بملء الشاشة
  • سمة مكوّن إيقاف الميزة PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE غير مفعّلة
  • تم تفعيل إعداد تجاهل طلب الاتجاه لدى الشركة المصنّعة للجهاز للشاشة
  • الاتجاه الطبيعي للشاشة هو أفقي

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

غير منطبق. من المفترض أن يتم حلّ المشكلة في منطق التطبيق.

كيفية تحسين التطبيقات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

تفعِّل سياسة التوافق التي تتخطّى تعديل اتجاه التطبيق استجابةً لاستدعاء التطبيق Activity#setRequestedOrientation() عند إعادة تشغيل التطبيق أو عند تطبيق معالجة نشطة للتوافق مع الكاميرا.

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط علامة السمة PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION على true.

كيفية تحسين التطبيقات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

تفعِّل سياسة التوافق التي تتجاهل الاتجاه المطلوب للتطبيق في استجابةً للتطبيق الذي يطلب Activity#setRequestedOrientation() أكثر من مرّتين في ثانية واحدة إذا لم يكن النشاط مُعدًّا للعرض على شاشة عريضة أفقيًا للاتجاه الثابت.

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"

غير منطبق. من المفترض أن يتم حلّ المشكلة في منطق التطبيق.

كيفية تحسين التطبيقات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
  android:value="false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

استبعاد الحِزم من سلوك طلب تجاهل الاتجاه الذي يمكن أن يفعّله صنّاع الأجهزة لمنطقة شاشة أو الشاشة بأكملها

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

غير منطبق. من المفترض أن يتم حلّ المشكلة في منطق التطبيق.

كيفية تحسين التطبيقات

يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

لا يمكن إيقاف هذه الميزة. قد يكون إيقاف خيار إلغاء الإعدادات خطيرًا إذا كان التطبيق غير متوافق مع جهاز تم تفعيل إعداد تجاهل طلب الاتجاه في الشركة المصنّعة للجهاز. يُرجى التواصل مع قسم تطوير التطبيقات للمطوّرين على Android لإيقاف الميزة.

علامات الموقع لتعديل إلغاء الإعدادات

لا تتوفّر علامات مواقع لهذا الإلغاء.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

NEVER_SANDBOX_DISPLAY_APIS

فرض عدم تطبيق وضع الحماية في Sandbox على حِزم Display واجهة برمجة التطبيقات لنشاط في وضع التوافق مع الحجم أو وضع إطار الصورة السينمائية Display واجهات برمجة التطبيقات تستمر في توفير حدود مساحة العرض.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

يمكنك الإفصاح عن أنّ الأنشطة قابلة للتغيير من خلال ضبط سمة البيان android:resizeableActivity على true أو علامة البيانات الوصفية android.supports_size_changes على true.

كيفية تحسين التطبيقات

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

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

لا يمكن إيقاف هذه الميزة. نقل البيانات من واجهات برمجة التطبيقات التي تم إيقافها نهائيًا

علامات الموقع لتعديل إلغاء الإعدادات

لا تتوفّر علامات مواقع لهذا الإلغاء.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

ALWAYS_SANDBOX_DISPLAY_APIS

يفرض على الحِزم تطبيق وضع الحماية في واجهة برمجة التطبيقات Display دائمًا بغض النظر عن وضع وضع النوافذ. تقدّم واجهات برمجة التطبيقات Display حدود التطبيق في جميع الأوقات.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

يمكنك تحديد أنّ الأنشطة غير قابلة للتغيير من خلال ضبط سمة android:resizeableActivity على false أو علامة البيانات الوصفية android.supports_size_changes على false.

كيفية تحسين التطبيقات

يجب ألا تعتمد التطبيقات التي تعلن أنّها قابلة للتغيير بالكامل على حجم الشاشة لتحديد موضع عناصر واجهة المستخدم. نقل بيانات تطبيقك من واجهات برمجة التطبيقات المتوقّفة إلى واجهات برمجة التطبيقات المحدّثة التي توفّر WindowMetrics يُرجى الاطّلاع على WindowMetricsCalculator.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

لا يمكن إيقاف هذه الميزة. نقل البيانات من واجهات برمجة التطبيقات التي تم إيقافها نهائيًا

علامات الموقع لتعديل إلغاء الإعدادات

لا تتوفّر علامات مواقع لهذا الإلغاء.

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

تفرض الحِزم وضع حظر على واجهات برمجة التطبيقات التالية View في حدود النشاط:

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

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

كيفية تحسين التطبيقات

يجب أن تستخدم التطبيقات واجهات برمجة التطبيقات View، مع مراعاة إمكانية تطبيق وضع "ملء الشاشة" ووضع "النوافذ المتعددة" على التطبيق. يُرجى الاطّلاع على WindowMetricsCalculator.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
  android:value="false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

إيقاف ميزة "فرض التدوير" تحسين تجربة المستخدم في بعض التطبيقات

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط علامة السمة PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION على false.

كيفية تحسين التطبيقات

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

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION على true.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة التي تلغي الإعدادات السابقة، ما يؤدي إلى إيقاف ميزة "فرض التدوير":

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

لإزالة الإعدادات التي تم إلغاؤها، ما يسمح بإجراء عملية الدفع بالتناوب بالقوة:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

إيقاف إعادة تحميل الأنشطة بعد فرض التدوير تحسين تجربة المستخدم عندما يؤدي إعادة التحميل إلى فقدان الحالة في التطبيقات

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط علامة السمة PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH على false.

كيفية تحسين التطبيقات

راجِع OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH على true.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات التلقائية التي تزيل ميزة إعادة تحميل النشاط:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

لإزالة الإعدادات المُلغاة التي تسمح بإعادة تحميل النشاط:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

تؤدي هذه القيمة إلى إعادة تحميل النشاط في الحِزم التي يتم تطبيقها عليها باستخدام دورة onResume()onPause()onResume() بدلاً من onResume()onStop()onResume() بعد فرض دوران التوافق مع الكاميرا.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط علامة السمة PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE على true.

كيفية تحسين التطبيقات

راجِع OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

يفرض اقتصاص إخراج الكاميرا بالاتجاه المقابل عندما لا يكون اتجاه كاميرا الوضع العمودي ALIGNED مع اتجاه الجهاز الطبيعي. لا تتعامل العديد من التطبيقات مع هذا الموقف وتعرض الصور بشكل ممتد.

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط علامة السمة PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT على true.

كيفية تحسين التطبيقات

راجِع OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات المُلغاة، والتي تؤدي إلى اقتصاص المحتوى باستخدام الكاميرا الأمامية الداخلية:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

لإزالة وضع "الإلغاء" الذي يزيل اقتصاص الكاميرا الأمامية الداخلية، اتّبِع الخطوات التالية:

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

ملاحظة: لا تُطبِّق الأوامر إلغاء الإعدادات إلا مؤقتًا أو تزيله.

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

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

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

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

كيفية تحسين التطبيقات

السماح للمستخدمين باختيار ما إذا كانوا يريدون مشاركة شاشة الجهاز بالكامل أو نافذة أحد التطبيقات أثناء عرض الوسائط، وهو السلوك التلقائي اعتبارًا من Android 14

اجعل تطبيقك قابلاً للتغيير (resizeableActivity="true") ليعمل في وضع "النوافذ المتعددة".

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

بسبب خطورة خصوصية المستخدم، لا يمكن لتطبيقك إيقاف هذه الميزة أو إيقاف الإعدادات التي تم إلغاؤها.

علامات الموقع لتعديل إلغاء الإعدادات

بلا عُري

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الفائقة التي تلغي إيقاف التطبيق لميزة "مشاركة الشاشة الجزئية" (أي تفعيل ميزة "مشاركة الشاشة الجزئية"):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

لإزالة الإعداد الذي يتيح للتطبيق إيقاف مشاركة الشاشة المجزّأة:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

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

كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"

اضبط علامة السمة PROPERTY_COMPAT_ENABLE_FAKE_FOCUS على true.

كيفية تحسين التطبيقات

يمكنك تجنُّب هذه المشكلة إذا كان تطبيقك يتعامل مع الاتجاهات المتعدّدة و تغييرات الإعدادات بشكل جيد. احرص على إتاحة تطبيقك على الشاشات الكبيرة باتّباع إرشادات جودة التطبيقات المخصّصة للشاشات الكبيرة.

إذا كنت تستخدم محرّك ألعاب Unity، عليك الترقية إلى الإصدار 2019.4.40 أو إصدار أحدث ومحاولة إعادة تصدير لعبتك. اترك الخيار Resizable Window محدَّدًا في إعدادات مشغّل Android.

كيفية إيقاف ميزة "الإلغاء" أو إيقافها

اضبط علامة السمة PROPERTY_COMPAT_ENABLE_FAKE_FOCUS على false.

علامات الموقع لتعديل إلغاء الإعدادات

<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
  android:value="true|false"/>

أوامر adb لاختبار إلغاء الإعدادات

لتطبيق الإعدادات الجديدة:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

لإزالة الإعدادات المُلغاة:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

ملاحظة: لا تُطبِّق الأوامر إلغاء الإعدادات إلا مؤقتًا أو تزيله.

مصادر إضافية