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

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

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

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

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

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

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

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

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

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

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

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

المشكلة

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

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

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

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

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

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

تحسين

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

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

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

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

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

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

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

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

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

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

يضيف Android 13 (المستوى 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() لأن طلب الاتجاه يمكن ظهرت بشكل غير متوقع بسبب تغييرات لم تتم معالجتها في الإعدادات
  • على افتراض أنّ الاتجاه الطبيعي للجهاز (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 يعمل على تدوير التطبيق لمحاذاة نافذة التطبيق في الوضع العمودي مع اتجاه الجهاز.

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

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

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

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

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

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

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

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

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

المشكلة

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

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

لمزيد من المعلومات، يُرجى مراجعة إتاحة النوافذ المتعددة:

واجهات برمجة تطبيقات العرض الذي يسيء استخدامها:

تحسين

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

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

المشكلة

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

تحسين

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

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

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

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

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

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

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

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

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

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

ألعاب الوحدة

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

المشكلة

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

تحسين

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

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

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

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

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

في بيان التطبيق، يمكنك إما تعيين 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_REING_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 وعرض واجهة برمجة التطبيقات WindowSizeClass

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

حدِّد قيودًا على نسبة العرض إلى الارتفاع أو اضبط علامة السمة 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. في حالات محدودة للغاية، يمكنك أن تقرر قفل الاتجاه على الشاشات الصغيرة فقط، رغم أن ذلك قد لا يؤدي إلى تغيير حجمه السماح للمستخدم بتدوير التطبيق حسب الحاجة. في نظام التشغيل Android 12L والإصدارات الأحدث، يمكن إلغاء الاتجاه الثابت من خلال إعداد الجهاز. لمزيد من المعلومات، معلومات حول التعامل مع تغييرات التهيئة ودعم جميع الاتجاهات، يمكنك الاطّلاع على القسم التعامل مع التغييرات في إعدادات التعامل مع البيانات. نظرة عامة على 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_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

تفعيل اتجاه جهاز الاستشعار لجميع الأنشطة في طرد. ما لم تكن 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

تفعيل الاتجاه العكسي العكسي لجميع الأنشطة في الحزمة. ما لم تكن 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

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

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

يمكنك تعريف الأنشطة التي يمكن تغيير حجمها عن طريق ضبط 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

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

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

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

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

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

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

ضبط علامة الموقع 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>

ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.

مصادر إضافية