وضع التوافق مع الشاشة الكبيرة

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

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

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

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

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

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

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

الشكل 1. يتم عرض التطبيق الذي يقتصر على الاتجاه الرأسي على شاشة عريضة أفقيًا على الجهاز اللوحي الأفقي وقابل للطي.

المشكلة

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

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

  • screenOrientation: لتحديد اتجاه ثابت للتطبيق. ويمكن للتطبيقات أيضًا ضبط الاتجاه في وقت التشغيل باستخدام Activity#setRequestedOrientation().
  • resizeableActivity: يشير إلى ما إذا كان بإمكان النظام تغيير حجم التطبيقات لتلائم النوافذ ذات الأبعاد المختلفة. في نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) والإصدارات الأقدم، يحدِّد هذا الإعداد ما إذا كانت التطبيقات متوافقة مع وضع النوافذ المتعددة. في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يحدِّد هذا الإعداد ما إذا كانت التطبيقات تتيح وضع النوافذ المتعددة على الشاشات الصغيرة (sw < 600dp). على نظام التشغيل Android 12 والإصدارات الأحدث، تتيح التطبيقات وضع النوافذ المتعددة على الشاشات الكبيرة (sw >= 600dp) بغض النظر عن هذا الإعداد.
  • maxAspectRatio: يحدد هذا الإعداد الحد الأقصى لنسبة العرض إلى الارتفاع التي يتيحها التطبيق. لا يمكن ضبط maxAspectRatio إلا للتطبيقات التي تم ضبط resizeableActivity على "خطأ".
  • minAspectRatio: يحدد هذا الإعداد الحد الأدنى لنسبة العرض إلى الارتفاع التي يتيحها التطبيق. لا يمكن ضبط minAspectRatio إلا للتطبيقات التي تم ضبط resizeableActivity على "خطأ".

التحسين

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

حل التوافق

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

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

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

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

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

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

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

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

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

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

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

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

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

المشكلة

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

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

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

التحسين

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

حل التوافق

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

حلقة وامضة

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

المشكلة

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

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

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

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

التحسين

يجب ألا تنفّذ التطبيقات ما يلي:

  • عيِّن اتجاهًا تلقائيًا باستخدام Activity#setRequestedOrientation() في طريقة النشاط onCreate() لأنه يمكن تشغيل طلب الاتجاه بشكل غير متوقع بسبب تغييرات لم تتم معالجتها في الإعدادات
  • لنفترض أنّ الاتجاه الطبيعي للجهاز (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 على أنه "يجب توجيه أداة استشعار الصور في الكاميرا لكي يتوافق بُعد الكاميرا الطويل مع البُعد الطويل للشاشة".

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

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

التحسين

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

حل التوافق

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

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

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

    على Pixel Tablet، يتم تدوير نافذة التطبيق في الوضع العمودي إلى الوضع العمودي في وضع ملء الشاشة لتتماشى مع الاتجاه الطبيعي للجهاز. يشغل التطبيق وضع ملء الشاشة بعد فرض التدوير.

    على الشاشة الداخلية لهاتف Pixel Fold، يتم تدوير الأنشطة في الوضع العمودي فقط إلى الوضع الأفقي للتوافق مع الاتجاه الطبيعي غير المطوي. يتم عرض التطبيق على شاشة عريضة أفقيًا بعد فرض الدوران.

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

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

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

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

واجهات برمجة التطبيقات التي يسيئ استخدامها

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

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

المشكلة

يواصل المطوّرون استخدام واجهات برمجة التطبيقات Display المتوقّفة نهائيًا والافتراض أنّ هذه الواجهات تعرض بشكل غير صحيح حدود التطبيقات بدلاً من حدود مساحة عرض الجهاز. أو يستخدم المطوِّرون عن طريق الخطأ واجهات برمجة التطبيقات View 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.Material.Dialog، أنماطًا تجعل الأنشطة شفافة.

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

المشكلة

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

التحسين

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

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

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

زوايا مستديرة

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

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

حل التوافق

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

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

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

ألعاب الوحدة

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

المشكلة

أضافت Unity خيار Resizable Window لإتاحة وضع النوافذ المتعددة على نظام التشغيل Android منذ إصدار Unity 2019.4. ومع ذلك، لم يتفاعل التنفيذ الأولي مع دورة حياة النشاط في وضع النوافذ المتعددة بشكل صحيح، ما تسبب في تعليق تشغيل التطبيق 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 rule = new ActivityScenarioRule<>(MainActivity.class);

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

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

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

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

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

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

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

تتضمّن القائمة قائمة بجميع التطبيقات المثبَّتة على الجهاز. يختار المستخدمون تطبيقًا، ثم يضبطون نسبة العرض إلى الارتفاع للتطبيق على 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.


  • الموقع الإلكتروني 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.

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

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

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

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

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

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

يمكنك تفعيل عمليات الإلغاء أو إيقافها على النحو التالي:

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

على جهازَي Pixel Tablet وPixel Fold، تحقّق من حالات الإلغاء التي تنطبق على تطبيقك:

adb shell dumpsys platform_compat | grep <package name>

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

عمليات الإلغاء لكل تطبيق
Type الاسم رقم التعريف الوصف
إمكانية تغيير الحجم 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_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 لإلغاء الاتجاه ليكون عموديًا عندما يكون للنشاط اتجاه غير محدد.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 تلغي هذه الميزة الاتجاه إلى nosensor (استخدِم الاتجاه الطبيعي للجهاز) عندما يكون للنشاط اتجاه غير محدّد.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 تدوير التطبيقات في الوضع الأفقي فقط بمقدار 180 درجة.
OVERRIDE_ANY_ORIENTATION 265464455 لتفعيل إلغاء أي اتجاه.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 يتم حصر نطاق إلغاء الاتجاه عندما يكون التطبيق متصلاً بالكاميرا.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 لضبط العرض على الاتجاه الطبيعي الثابت عندما تكون المهمة في وضع ملء الشاشة (بما في ذلك عندما تكون مُعدّة للعرض على شاشة عريضة أفقيًا).
OVERRIDE_ENABLE_COMPAT_IGNORE_required_ORIENTATION 254631730 وهو يتجاهل طلبات الاتجاه من التطبيق لتجنب حلقات التناوب.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETectED 273509367 تتجاهل طلبات التوجيه المتكررة أثناء إعادة تشغيل النشاط. إذا اكتشف Android أنّ أحد التطبيقات يطلب اتجاهين جديدين على الأقل خلال ثانية واحدة، سيعتبر النظام هذا تكرارًا لتدوير الشاشة ويطبّق عملية الإلغاء.
OVERRIDE_RESPENT_REQUESTED_ORIENTATION 236283604 لمنع الأشرطة الأفقية عن طريق إيقاف إعداد طلب تجاهل الشركة المصنّعة للجهاز.
واجهات برمجة تطبيقات وضع الحماية NEVER_SANDBOX_DISPLAY_APIS 184838306 لمنع تغيير سلوك أي واجهات برمجة تطبيقات للعرض.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 يؤدي هذا الخيار إلى فرض عرض حدود التطبيق على واجهات برمجة تطبيقات Display في التطبيق. تعرض واجهات برمجة تطبيقات الشبكة الإعلانية حدود منطقة العرض، ولكن في بعض الأحيان يفترض التطبيق أنّ واجهات برمجة تطبيقات الشبكة الإعلانية تعرض حدود التطبيق، ما يؤدي إلى حدوث مشاكل في واجهة المستخدم.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 يؤدي هذا الخيار إلى فرض عرض حدود التطبيق على واجهات برمجة التطبيقات View المستخدَمة في التطبيق. تعرض "واجهات برمجة التطبيقات" (View API) حدود مساحة العرض، ولكن في بعض الأحيان، يفترض التطبيق أنّ "View APIs" (واجهات برمجة التطبيقات) تعرض حدود التطبيق، ما يؤدي إلى حدوث مشاكل في واجهة المستخدم.
التوافق مع الكاميرا 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 يتم اقتصاص المخزن المؤقت للصورة من الكاميرا الأمامية الداخلية. وفي حال إيقاف ميزة الإلغاء، ستتم إزالة اقتصاص الكاميرا الأمامية الداخلية، وتتم زيادة مجال رؤية معاينة الكاميرا. يقتصّ النظام تلقائيًا على هاتف Pixel Fold معاينة الكاميرا لجميع تطبيقات الكاميرا عند استخدام الكاميرا الأمامية الداخلية.
أسئلة متنوعة OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 ويتم منع حجب التطبيق عندما يفقد التطبيق التركيز في وضع تقسيم الشاشة. ينتظر التطبيق التركيز قبل رسم محتوى التطبيق، ما قد يؤدي إلى توقّف التطبيق أو حجبه. ويتيح هذا الإلغاء لنظام Android إرسال حدث تركيز وهمي إلى التطبيق، ما يرسل إشارات إلى التطبيق لبدء رسم المحتوى مرة أخرى.

فرض_حجم_التطبيق

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

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

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

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

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

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

اضبط علامة الخاصية PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES على "خطأ".

علامات الموقع لضبط التجاهل

<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 على "خطأ" في بيان التطبيق، وأعلِن عن فرض قيود على الاتجاه أو نسبة العرض إلى الارتفاع.

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

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

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

اضبط علامة الخاصية PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES على "خطأ".

علامات الموقع لضبط التجاهل

<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 وعرض واجهة برمجة تطبيقات WindowSizeClass.

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

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

علامات الموقع لضبط التجاهل

<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_UNDEFINED_ORIENTATION_TO_PORTRAIT

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

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

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

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

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

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

اضبط علامة الموقع PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE على "خطأ".

علامات الموقع لضبط التجاهل

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

أوامر 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، لا يتم استخدام التجاوز إلا عندما لا يتم تحديد اتجاه ثابت آخر من خلال النشاط.

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

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

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

يمكنك الاطّلاع على OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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

اضبط علامة الموقع PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE على "خطأ".

علامات الموقع لضبط التجاهل

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

أوامر 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

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

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

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

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

يمكنك الاطّلاع على OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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

اضبط علامة الموقع PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE على "خطأ".

علامات الموقع لضبط التجاهل

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

أوامر 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_ANY_ORIENTATION

يسمح هذا الإعداد بعمليات تجاوز OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT وOVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR وOVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE لإلغاء أي اتجاه.

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

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

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

يمكنك الاطّلاع على OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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

اضبط علامة الموقع PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE على "خطأ".

علامات الموقع لضبط التجاهل

<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_ORIENTATION_ONLY_FOR_CAMERA

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

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

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

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

يمكنك الاطّلاع على OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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

اضبط علامة الموقع PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE على "خطأ".

علامات الموقع لضبط التجاهل

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

أوامر 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_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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

اضبط علامة الموقع PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE على "خطأ".

علامات الموقع لضبط التجاهل

<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 على "صحيح".

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

يمكنك الاطّلاع على OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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

ضبط علامة الموقع PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION على "خطأ"

علامات الموقع لضبط التجاهل

<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_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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

ضبط علامة الخاصية PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED على "خطأ"

علامات الموقع لضبط التجاهل

<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_RESPENT_required_ORIENTATION

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

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

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

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

يمكنك الاطّلاع على OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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

ما مِن إيقاف. يمكن أن يكون إيقاف الإلغاء أمرًا خطيرًا إذا كان التطبيق غير متوافق مع جهاز تم فيه تفعيل إعداد طلب تجاهُل الاتجاه الخاص بالشركة المصنّعة للجهاز. يُرجى التواصل مع فريق علاقات مطوّري برامج 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

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

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

يُرجى تعريف الأنشطة التي يمكن تغيير حجمها من خلال ضبط سمة البيان android:resizeableActivity على "صحيح" أو من خلال ضبط علامة البيانات الوصفية android.supports_size_changes على "صحيح".

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

يجب ألا تعتمد التطبيقات التي تعلن عن إمكانية تغيير حجمها بشكل كامل على حجم الشاشة لتحديد موضع عناصر واجهة المستخدم. يمكنك نقل تطبيقك إلى أحدث واجهات برمجة التطبيقات التي توفّر "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 على "خطأ" أو ضبط علامة البيانات الوصفية android.supports_size_changes على "خطأ".

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

يجب ألا تعتمد التطبيقات التي تعلن عن إمكانية تغيير حجمها بشكل كامل على حجم الشاشة لتحديد موضع عناصر واجهة المستخدم. يمكنك نقل تطبيقك من واجهات برمجة التطبيقات الحديثة التي تم إيقافها نهائيًا والتي توفّر 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 على "خطأ"

علامات الموقع لضبط التجاهل

<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 على "خطأ"

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

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

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

اضبط علامة الموقع PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION على "صحيح".

علامات الموقع لضبط التجاهل

<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 على "خطأ"

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

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

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

اضبط علامة الموقع PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH على "صحيح".

علامات الموقع لضبط التجاهل

<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 على "صحيح".

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

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

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

ضبط علامة الموقع PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE على "خطأ"

علامات الموقع لضبط التجاهل

<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

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

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

اضبط علامة الموقع PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT على "صحيح".

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

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

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

ضبط علامة الموقع PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT على "خطأ"

علامات الموقع لضبط التجاهل

<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() لفرض التقاط صور بملء الشاشة وتعريض خصوصية المستخدم للخطر من خلال عرض محتوى الإشعارات، التي يتم تسجيلها من خلال وضع ملء الشاشة ولكن ليس من خلال مشاركة شاشة التطبيق، ولجميع التطبيقات بغض النظر عن وضع النافذة.

كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي يتم عندها الإلغاء

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

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

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

يمكنك تغيير حجم تطبيقك (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 على "صحيح".

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

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

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

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

ضبط علامة الموقع PROPERTY_COMPAT_ENABLE_FAKE_FOCUS على "خطأ"

علامات الموقع لضبط التجاهل

<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>

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

مراجع إضافية