يُفعّل Android وضع التوافق للتطبيقات التي تفرض قيودًا على الاتجاه أو تغيير الحجم. يضمن وضع التوافق سلوكًا مقبولاً للتطبيق على الأجهزة ذات الشاشات الكبيرة والهواتف القلّابة القابلة للطي وبيئات أجهزة الكمبيوتر المكتبي، ولكن مع سهولة استخدام دون المستوى الأمثل.
تتيح عمليات إلغاء الإعدادات لكل تطبيق للشركات المصنّعة للأجهزة ومالكي الأجهزة الافتراضية1 والمستخدمين تغيير سلوك التطبيق لتحسين تصميمه أو منع تعطُّله على أجهزة معيّنة.
Android 16
يتجاهل Android 16 (مستوى واجهة برمجة التطبيقات 36) القيود المفروضة على اتجاه الشاشة ونسبة العرض إلى الارتفاع وإمكانية تغيير حجم التطبيق لتحسين تنسيق التطبيقات على أشكال الأجهزة التي يبلغ أصغر عرض لها >= 600 بكسل مستقل الكثافة.
لا تعمل عمليات الإلغاء التالية لكل تطبيق على التطبيقات التي تستهدف المستوى 36 من واجهة برمجة التطبيقات:
- FORCE_RESIZE_APP
- FORCE_NON_RESIZE_APP
- OVERRIDE_MIN_ASPECT_RATIO
- OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
- OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
- OVERRIDE_MIN_ASPECT_RATIO_LARGE
- OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
- OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
- OVERRIDE_ANY_ORIENTATION
- OVERRIDE_ANY_ORIENTATION_TO_USER
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
- OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
- OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
- OVERRIDE_RESPECT_REQUESTED_ORIENTATION
إيقاف
يمكن أن يستهدف تطبيقك المستوى 36 من واجهة برمجة التطبيقات، ولكن مع إيقاف سلوك Android 16، وفي هذه الحالة لا ينطبق الإذن OVERRIDE_ANY_ORIENTATION_TO_USER.
تعريف سمة البيان
لإيقاف سلوك مستوى واجهة برمجة التطبيقات 36، يجب تعريف السمة PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY في ملف البيان.
لإيقاف التتبُّع لنشاط معيّن، اضبط السمة في العنصر <activity>:
<activity ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</activity>
لإيقاف هذه الميزة في تطبيقك بالكامل، اضبط السمة في العنصر <application>:
<application ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</application>
إذا كان تطبيقك يستهدف Android 16 (المستوى 36 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث، فإنّ هذه السمة لا تقفل اتجاه العرض أو تمنع تدوير الشاشة على الشاشات الكبيرة.
الأجهزة المرجعية
قد تتطلّب الأجهزة التالية عمليات تجاوز لكل تطبيق بسبب الإعدادات غير المعتادة أو الإعدادات التي لا تتوافق معها التطبيقات بشكل جيد:
- الأجهزة اللوحية: يكون الاتجاه الطبيعي لبعض الأجهزة اللوحية، مثل Pixel Tablet، هو الاتجاه الأفقي. يكون الجهاز في اتجاهه الطبيعي عندما تعرض الدالة
Display#getRotation()Surface.ROTATION_0. إذا افترضت التطبيقات أنّ اتجاه "ROTATION_0" عمودي، قد لا تتطابق تنسيقات التطبيقات ومعاينة الكاميرا مع شاشة الجهاز. - الأجهزة القابلة للطي في الوضع الأفقي: تكون بعض الأجهزة القابلة للطي، مثل Pixel Fold، في الوضع العمودي عندما تكون مطوية، ولكن في الوضع الأفقي عندما تكون مفتوحة. إذا افترضت التطبيقات أنّ الاتجاه غير المطوي هو الاتجاه العمودي، من المرجّح أن تحدث حلقات وميض أو مشاكل في التنسيق.
- الهواتف القلّابة القابلة للطي: تكون الهواتف القلّابة المفتوحة عادةً في الوضع العمودي. ولكن عند طيها، عادةً ما تحتوي الهواتف على شاشة صغيرة في الاتجاه الأفقي. يجب أن تحدّد التطبيقات الاتجاهات المختلفة للشاشات وتتلاءم معها.
- الشاشات الخارجية: يمكن لبعض الأجهزة بدء جلسة "العرض في نافذة" على شاشات خارجية متصلة. يجب أن تطلب التطبيقات معلومات من الشاشات الخارجية، مثل حجم الشاشة ودرجة الدقة، وإلا قد تضع التطبيقات افتراضات غير صحيحة حول الشاشات، ما قد يؤدي إلى سلوك غير صحيح للتطبيق.
- شاشات السيارات: العديد من شاشات السيارات، ولكن ليس كلها، تكون في الوضع الأفقي. إنّ تطوير التطبيقات المخصّصة للاستخدام أثناء ركن السيارة لشاشات السيارات يشبه تطوير التطبيقات للأجهزة اللوحية.
مشاكل التوافق الشائعة
غالبًا ما تواجه التطبيقات مشاكل في التوافق بسبب القيود المفروضة على اتجاه التطبيق، والقيود المفروضة على إمكانية تغيير الحجم ونسبة العرض إلى الارتفاع، والتعامل غير الصحيح مع اتجاه معاينة الكاميرا، وإساءة استخدام واجهات برمجة التطبيقات.
ليتيربوكسينغ
يضع وضع "صندوق الرسائل" التطبيق في منتصف الشاشة أو على أحد الجانبين على الشاشات الكبيرة، لتسهيل الوصول إليه. وتملأ الأشرطة غير اللامعة (أشرطة بلون واحد أو خلفية مموّهة) مساحة العرض غير المستخدَمة على طول جوانب التطبيق أو في أعلاه وأسفله.
يحدث ذلك غالبًا على الأجهزة ذات الشاشات الكبيرة لأنّ أبعاد شاشات هذه الأجهزة ونسبة العرض إلى الارتفاع فيها تختلف عادةً عن أبعاد الهواتف العادية التي يتم تصميم معظم التطبيقات لها.
الشكل 1: يتم عرض التطبيق المقيّد بالاتجاه العمودي في وضع شاشة عريضة على الأجهزة اللوحية والأجهزة القابلة للطي في الوضع الأفقي.
المشكلة
لا يتوافق التطبيق مع جميع إعدادات العرض لأنّه يتضمّن اتجاهًا ثابتًا أو نسبة عرض إلى ارتفاع ثابتة أو لا يمكن تغيير حجمه.
تشمل إعدادات الضبط التي تتحكّم في اتجاه التطبيق وإمكانية تغيير حجمه ما يلي:
screenOrientation: تحدِّد اتجاهًا ثابتًا للتطبيق. يمكن للتطبيقات أيضًا ضبط الاتجاه أثناء التشغيل باستخدامActivity#setRequestedOrientation().resizeableActivity: تشير إلى ما إذا كان بإمكان النظام تغيير حجم التطبيقات لتناسب النوافذ ذات الأبعاد المختلفة. في الإصدار 11 من نظام التشغيل Android (المستوى 30 لواجهة برمجة التطبيقات) والإصدارات الأقدم، تحدّد هذه السمة ما إذا كانت التطبيقات تتيح وضع النوافذ المتعددة. في نظام التشغيل Android 12 (مستوى واجهة برمجة التطبيقات 31) والإصدارات الأحدث، يحدّد هذا الإعداد ما إذا كانت التطبيقات تتيح وضع النوافذ المتعددة على الشاشات الصغيرة (فئة حجم النافذة المدمجة). على نظام التشغيل Android 12 والإصدارات الأحدث، تتيح التطبيقات وضع النوافذ المتعددة على الشاشات الكبيرة (فئة حجم النافذة المتوسطة أو الموسّعة) بغض النظر عن هذا الإعداد.maxAspectRatio: تحدِّد الحد الأقصى لنسبة العرض إلى الارتفاع التي يتيحها التطبيق. يمكن فقط للتطبيقات التي تم ضبطresizeableActivityفيها علىfalseضبطmaxAspectRatio.minAspectRatio: يحدّد الحد الأدنى لنسبة العرض إلى الارتفاع التي يتيحها التطبيق. يمكن فقط للتطبيقات التي تم ضبطresizeableActivityفيها علىfalseضبطminAspectRatio.
التطبيق مقتصر على الاتجاه العمودي ولا يمكن استخدامه على جهاز في الاتجاه الأفقي.
تحسين
يجب أن يتوافق التطبيق مع جميع اتجاهات وأحجام العرض على الأجهزة وفي وضع النوافذ المتعددة. أزِل جميع القيود المفروضة على الاتجاه ونسبة العرض إلى الارتفاع الثابتة من تنسيقات تطبيقك وملف بيان التطبيق.
يدعم التطبيق جميع اتجاهات الجهاز.
الحلّ البديل للتوافق
إذا تم تشغيل تطبيق ذي اتجاه ثابت أو نسبة عرض إلى ارتفاع ثابتة في نافذة لا يتوافق فيها التطبيق مباشرةً مع حجم النافذة أو اتجاهها، يضيف Android أشرطة سوداء إلى التطبيق للحفاظ على استمرارية العرض.
بدءًا من الإصدار Android 12 (المستوى 31 من واجهة برمجة التطبيقات) والإصدار 12L (المستوى 32 من واجهة برمجة التطبيقات)، يطبّق النظام الأساسي مجموعة متنوعة من التحسينات على التطبيقات التي تستخدم وضع العرض على شاشة عريضة. وتنفّذ الشركات المصنّعة للأجهزة تحسينات واجهة المستخدم. ولن تحتاج إلى إجراء أي تطوير إضافي لتطبيقك للاستفادة من التحسينات.
يقدّم Android 12 (المستوى 31 لواجهة برمجة التطبيقات) التحسينات الجمالية التالية، والتي يمكن ضبطها من قِبل الشركات المصنّعة للأجهزة:
- الزوايا الدائرية: تتميز زوايا نافذة التطبيق بمظهر أكثر أناقة.
- شفافية شريط النظام: تكون أشرطة الحالة والتنقّل التي تظهر فوق التطبيق شبه شفافة، ما يجعل الرموز على الأشرطة مرئية دائمًا فوق خلفية الشاشة السوداء.
- نسبة العرض إلى الارتفاع القابلة للضبط: يمكن ضبط نسبة العرض إلى الارتفاع في التطبيق لتحسين مظهره.
الشكل 2: تطبيق معروض في وضع Letterbox مع تحسينات في واجهة المستخدم
يضيف الإصدار 12L (المستوى 32 من واجهة برمجة التطبيقات) التحسينات الوظيفية التالية:
إمكانية ضبط موضع التطبيق: على الشاشات الكبيرة، يمكن للشركات المصنّعة للأجهزة ضبط موضع التطبيق على الجانب الأيمن أو الأيسر من الشاشة، ما يسهّل التفاعل معه.
إعادة تصميم زر إعادة التشغيل: يمكن للشركات المصنّعة للأجهزة منح زر إعادة التشغيل في وضع التوافق مع حجم الشاشة مظهرًا جديدًا ليتعرّف عليه المستخدمون بشكل أفضل.
يضيف Android 13 (المستوى 33 لواجهة برمجة التطبيقات) مربّع حوار لتثقيف المستخدمين حول تحديد موضع التطبيق الذي يتضمّن شاشة سوداء على الشاشة أو تضمين الشاشة السوداء في وضع تقسيم الشاشة:
الشكل 3: تطبيق Letterbox مع مربّع حوار لتثقيف المستخدمين
وضع التوافق مع الحجم
وضع التوافق مع الحجم هو وضع Letterbox الذي يحافظ على نسبة العرض إلى الارتفاع في التطبيق ويتضمّن عنصر تحكّم في إعادة التشغيل. يتيح عنصر التحكّم للمستخدمين إعادة تشغيل التطبيق وإعادة رسم الشاشة. يستدعي Android وضع التوافق مع الحجم للتطبيقات التي لا يمكن تغيير حجمها. عندما ينتقل نشاط إلى حاوية عرض غير متوافقة مع أبعاد النشاط، قد يعيد النظام ضبط حجم التطبيق لملء شاشة الجهاز في بُعد واحد على الأقل.
تشمل تغييرات إعدادات الجهاز التي يمكن أن تؤدي إلى تفعيل وضع التوافق مع الحجم ما يلي:
- تدوير الجهاز
- جهاز قابل للطي يتم طيّه أو فتحه
- التبديل بين وضعَي العرض "ملء الشاشة" و"تقسيم الشاشة"
المشكلة
ينطبق وضع "التوافق مع الحجم" عادةً على الأنشطة التي تكون مقيّدة من حيث الاتجاه أو نسبة العرض إلى الارتفاع والتي تم ضبطها (أو تحديدها من خلال النظام) على أنّها غير قابلة لتغيير الحجم.
يُعدّ تطبيقك قابلاً لتغيير الحجم، ولن يتم وضعه في وضع التوافق مع الحجم، إذا كان يستوفي أيًا من المعايير التالية:
- يمكن تغيير حجمه باستخدام
resizeableActivity="true" - يتيح وضع نافذة ضمن النافذة (PIP)
- مضمّنة
- تم تطبيق الإعدادات البديلة لكل تطبيق
FORCE_RESIZE_APPمن قِبل الشركة المصنّعة للجهاز (يتم تجاهل السمات التي يضبطها التطبيق)
إذا كان تطبيقك لا يستوفي أيًا من الشروط، فسيتم اعتباره غير قابل لتغيير الحجم وقد يتم وضعه في وضع التوافق مع الحجم.
يتعطّل التطبيق غير القابل لتغيير الحجم في وضع النوافذ المتعددة.
تحسين
يجب أن يتوافق التطبيق مع جميع أحجام العرض. يمكنك جعل تطبيقك قابلاً لتغيير الحجم من خلال ضبط سمة android:resizeableActivity للعنصر <activity> أو <application> على true في بيان التطبيق. صمِّم تنسيقات متجاوبة/متكيّفة لتطبيقك. لمزيد من المعلومات، اطّلِع على إتاحة أحجام العرض المختلفة وإتاحة وضع النوافذ المتعددة.
يعمل التطبيق في جميع أحجام النوافذ.
الحلّ البديل للتوافق
يضع Android التطبيق في وضع التوافق مع الحجم عندما يحدّد النظام أنّه يمكن تحسين عرض التطبيق الذي يتضمّن شاشة سوداء من خلال إعادة ضبط حجم التطبيق لملء نافذة العرض في سمة واحدة على الأقل. يعرض النظام عنصر تحكّم في إعادة التشغيل يعيد إنشاء عملية التطبيق، ويعيد إنشاء النشاط ويعيد رسم الشاشة. يمكنك أيضًا الاطّلاع على نظرة عامة على العمليات وسلاسل المحادثات.
تطبيق مخصّص للوضع العمودي فقط يتم عرضه في الوضع الأفقي مع إضافة أشرطة سوداء، وتتم إعادة ضبط حجمه من خلال عنصر التحكّم في إعادة التشغيل.
وضع التوافق مع الشاشة
يمنع وضع التوافق مع الشاشة إعادة تشغيل التطبيق عند نقله بين شاشات مختلفة، ما قد يؤدي إلى تغيير في الإعدادات، مثل وضع الألوان أو مدى توفّر الشاشة التي تعمل باللمس أو كثافة الشاشة.
يتم تفعيل وضع التوافق مع العرض تلقائيًا للألعاب (استنادًا إلى العلامة android:appCategory) لتحسين الثبات والاستمرارية.
على عكس وضع التوافق مع الحجم، لا يؤدي وضع التوافق مع العرض إلى تجميد
إعدادات التطبيق. سيظل بإمكان التطبيق تلقّي جميع تحديثات الإعدادات من خلال
واجهات برمجة التطبيقات، مثل دالة الاستدعاء onConfigurationChanged()، ولكن لن تتم إعادة تشغيله
بشكل يؤدي إلى تعطيل عمله. وهذا يعني أنّ الألعاب التي تتوافق بشكل صحيح مع واجهات برمجة التطبيقات، مثل
onConfigurationChanged()، سيظل بإمكانها تعديل واجهة المستخدم بشكل متجاوب حتى إذا
كانت في وضع التوافق مع العرض.
لإيقاف وضع التوافق مع العرض ومعالجة تغييرات الإعدادات في
تطبيقك، عليك الإعلان عن إتاحة تغييرات الإعدادات في ملف
AndroidManifest.xml الخاص بالتطبيق، ومعالجة تغييرات الإعدادات في
دالة الاستدعاء onConfigurationChanged().
<activity
android:name=".MyGameActivity"
android:configChanges="colorMode|touchscreen|density|...">
...
</activity>
تكرارات حلقية وامضة
عندما لا يتوافق تطبيق مع جميع اتجاهات العرض، قد يطلب بشكل متكرّر اتجاهات جديدة عند حدوث تغيير في الإعدادات، ما يؤدي إلى إنشاء حلقة لا نهائية تجعل الشاشة تومض أو يدور التطبيق بلا نهاية.
المشكلة
في نظام التشغيل 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().
تحسين
لا يُسمح للتطبيقات بإجراء ما يلي:
- اضبط اتجاهًا تلقائيًا باستخدام
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 أيضًا صورة أداة استشعار الكاميرا عندما يكون اتجاه أداة الاستشعار أفقيًا ومعاينة الكاميرا عمودية. تشمل الحلول البديلة
المحددة ما يلي:
فرض تدوير معاينات الكاميرا للتطبيقات التي تقتصر على الاتجاه العمودي: تتوقع التطبيقات التي تقتصر على الاتجاه العمودي أن يكون الاتجاه الطبيعي للجهاز واتجاه أداة استشعار الكاميرا عموديًا. ومع ذلك، في الإصدار 12 من نظام التشغيل Android (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن تشغيل التطبيقات في اتجاهات متعددة للأجهزة إذا تجاهلت الشركات المصنّعة للأجهزة مواصفات الاتجاه.
عندما يكون تطبيق مخصّص للوضع العمودي متصلاً بالكاميرا، يفرض Android تدوير التطبيق لمحاذاة نافذة التطبيق العمودية مع الاتجاه الطبيعي للجهاز.
على بعض الأجهزة اللوحية (راجِع الأجهزة المرجعية)، يتم تدوير نافذة التطبيق في الوضع العمودي إلى وضع ملء الشاشة العمودي ليتوافق مع الاتجاه الطبيعي للجهاز. يشغل التطبيق ملء الشاشة بعد فرض التدوير.
الجهاز اللوحي: فرض تدوير تطبيق يقتصر على الوضع العمودي
على الشاشة الداخلية للأجهزة القابلة للطي في الوضع الأفقي (راجِع الأجهزة المرجعية)، يتم تدوير الأنشطة التي تظهر في الوضع العمودي فقط إلى الوضع الأفقي لتتوافق مع الاتجاه الطبيعي للشاشة عند فتح الجهاز. يتم عرض التطبيق في وضع letterbox بعد فرض التدوير.
جهاز قابل للطي: فرض تدوير تطبيق مقيّد بالوضع العمودي، مع عرض التطبيق في وضع شاشة عريضة
اقتصاص الكاميرا الأمامية الداخلية: يكون مستشعر الكاميرا الأمامية الداخلية في بعض الأجهزة القابلة للطي في الوضع الأفقي. بالإضافة إلى فرض تدوير معاينة الكاميرا على الشاشة الداخلية القابلة للطي، يقتص Android مجال رؤية الكاميرا الأمامية الداخلية (في الوضع الأفقي) لكي تلتقط أداة الاستشعار عرضًا معاكسًا لاتجاه الجهاز.
فرض إعادة تحميل معاينات الكاميرا: يتنقّل النظام بين طريقتَي النشاط
onStop()وonStart()(تلقائيًا) أوonPause()وonResume()(يتم تطبيقهما من خلال الإعداد OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE لكل تطبيق) بعد فرض التدوير للتأكّد من عرض معاينة الكاميرا بشكل صحيح.تغيير نسبة العرض إلى الارتفاع: يغيّر النظام ديناميكيًا نسبة العرض إلى الارتفاع لمعاينة الكاميرا التي تم تدويرها بشكل إجباري إلى حد أدنى أعلى لنسبة العرض إلى الارتفاع، ما يضمن تغيير حجم معاينة الكاميرا بشكل صحيح.
يمكن لمطوّري التطبيقات إلغاء هذه الحلول البديلة إذا كانت التطبيقات تتعامل مع معاينة الكاميرا بشكل صحيح. يُرجى الاطّلاع على عمليات التجاوُز لكل تطبيق.
واجهات برمجة التطبيقات التي يشيع إساءة استخدامها
بعد أن أضاف Android ميزات مثل وضع النوافذ المتعددة وأجهزة مثل الأجهزة القابلة للطي، تم إيقاف واجهات برمجة التطبيقات القديمة واستبدالها بواجهات برمجة تطبيقات حديثة تعمل مع جميع أحجام الشاشات وأشكال الأجهزة. ومع ذلك، لا تزال واجهات برمجة التطبيقات المتوقّفة نهائيًا متاحة للتوافق مع الأنظمة القديمة.
تم تصميم بعض واجهات برمجة تطبيقات View لأغراض خاصة لا يفهمها المطوّرون دائمًا بشكل جيد.
المشكلة
يواصل المطوّرون استخدام واجهات برمجة التطبيقات Display المتوقّفة نهائيًا ويفترضون بشكل غير صحيح أنّ واجهات برمجة التطبيقات تعرض حدود التطبيق بدلاً من حدود مساحة عرض الجهاز. أو يستخدم المطوّرون عن طريق الخطأ واجهات برمجة تطبيقات خاصة بالعرض للحصول على مقاييس عامة حول العرض.
والنتيجة هي حدوث أخطاء في الحسابات عند إعادة تحديد موضع عناصر في واجهة المستخدم بعد أحداث تغيير حجم نافذة التطبيق، ما يؤدي إلى حدوث مشاكل في التنسيق.
واجهات برمجة التطبيقات المتوقفة نهائيًا والتي يُساء استخدامها بشكل شائع:
لمزيد من المعلومات، يُرجى الاطّلاع على مقالة إتاحة وضع النوافذ المتعددة.
واجهات برمجة التطبيقات الخاصة بالعرض التي تمت إساءة استخدامها:
واجهة برمجة التطبيقات المتوقّفة نهائيًا تحتسب حدود التطبيق بشكل خاطئ. يختفي محتوى التطبيق من الشاشة.
تحسين
لا تعتمد أبدًا على حجم العرض المادي لتحديد موضع عناصر واجهة المستخدم. يُرجى نقل تطبيقك إلى واجهات برمجة التطبيقات المستندة إلى WindowMetrics، بما في ذلك واجهات برمجة التطبيقات التالية في WindowManager:
النظام الأساسي:
Jetpack:
تحسب واجهة برمجة التطبيقات مقاييس نافذة التطبيق بشكل صحيح.
الحلّ البديل للتوافق
يتم استخدام عمليتَي تجاوز لتعديل واجهات برمجة التطبيقات 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
يتم تشغيل ألعاب Unity على Android في وضع ملء الشاشة أو في وضع النوافذ المتعددة. ومع ذلك، تفقد العديد من ألعاب Unity التركيز وتتوقف عن رسم المحتوى عند وضع التطبيق في وضع النوافذ المتعددة.
المشكلة
أضافت Unity خيار Resizable Window في الإصدار Unity 2019.4 لإتاحة وضع النوافذ المتعددة على Android. ومع ذلك،
لم يتفاعل التنفيذ الأولي مع مراحل النشاط في
وضع النوافذ المتعددة بشكل صحيح، ما تسبب في
تعليق UnityPlayer للتشغيل عندما يفقد التطبيق التركيز. عرض المشغّل شاشة سوداء أو آخر إطار مجمّد من اللعبة. وتم استئناف اللعب فقط عندما
نقر المستخدم على الشاشة. تواجه العديد من التطبيقات التي تستخدم محرّك Unity هذه المشكلة، وتظهر كنافذة سوداء في وضع النوافذ المتعددة.
تفقد اللعبة التركيز في وضع النوافذ المتعددة وتظهر كنافذة سوداء.
تحسين
يُرجى ترقية Unity إلى الإصدار 2019.4.40 أو إصدار أحدث وإعادة تصدير لعبتك. يجب إبقاء خيار
Resizable Window محدّدًا في
إعدادات مشغّل Android، وإلا
سيتم إيقاف اللعبة مؤقتًا عندما لا تكون في المقدّمة على الرغم من أنّها مرئية بالكامل في
وضع النوافذ المتعددة.
تعرض اللعبة المحتوى بشكل صحيح في وضع النوافذ المتعددة حتى عندما لا تكون في المقدّمة.
الحلّ البديل للتوافق
يمكن للشركات المصنّعة للأجهزة تطبيق الإعدادات البديلة
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
لكل تطبيق من أجل توفير حدث تركيز مزيّف لتطبيق في
وضع النوافذ المتعددة. يتيح التجاوز للنشاط إعادة رسم المحتوى وعدم حجبه.
العرض في نافذة
عند تشغيل التطبيقات في بيئة "العرض في نافذة"، قد تواجه أوضاع توافق إضافية.
يمكن تغيير حجم التطبيقات ذات الاتجاه المُقفَل بحرية. حتى إذا كان النشاط مقفلاً على الاتجاه العمودي، سيظل بإمكان المستخدمين تغيير حجم التطبيق إلى الاتجاه الأفقي.
لا يزال من الممكن تغيير حجم التطبيقات ذات الاتجاه المقفل بحرية.
ومع ذلك، إذا تم تحديد نشاط على أنّه غير قابل لتغيير الحجم (resizeableActivity = false)، يتم تغيير حجم واجهة مستخدم النشاط مع الحفاظ على نسبة العرض إلى الارتفاع نفسها.
يتم تغيير حجم واجهة المستخدم للأنشطة التي تم تحديدها على أنّها غير قابلة لتغيير الحجم.
معاينة الكاميرا في ميزة "العرض في نافذة"
عند تشغيل تطبيق في وضع "العرض في نافذة"، قد يختلف تدوير الشاشة واتجاه النافذة عمّا قد يظهر في وضع ملء الشاشة على الهواتف العادية.
المشكلة
تفترض التطبيقات غالبًا أنّ اتجاه الجهاز واتجاه ميزة الاستشعار في الكاميرا عموديان، ما قد يؤدي إلى عدم محاذاة معاينة الكاميرا أو تشويهها.
تحسين
يجب أن تحدّد تطبيقات الكاميرا اتجاه الجهاز واتجاه أداة استشعار الكاميرا وتديرهما بشكل صحيح لتقديم معاينة كاميرا محاذية ومقاسة بشكل صحيح. يجب أن تحتسب التطبيقات دوران الجهاز ودوران أداة الاستشعار ونسبة العرض إلى الارتفاع للنافذة، ثم تطبّق النتائج على معاينة الكاميرا، والتي يجب أن تستجيب أيضًا للتغييرات في ضبط النافذة. للحصول على إرشادات مفصّلة، يُرجى الاطّلاع على معاينة الكاميرا.
الحلّ البديل للتوافق
عندما تبدأ التطبيقات ذات الاتجاه الثابت في وضع "العرض في نافذة" معاينة الكاميرا، قد يشغّل النظام معالجة توافق الكاميرا لتجنُّب المعاينات الممتدة والجانبية.
تضع المعالجة البيئة في وضع الحماية لتتطابق مع الاتجاه المطلوب بالطرق التالية:
إضافة أشرطة سوداء إلى نافذة التطبيق لتناسب الاتجاه المطلوب: يهدف ذلك إلى تجنُّب مشاكل تمديد المحتوى بسبب تغيير الحجم بشكل غير مناسب.
عزل تدوير الشاشة: تحاكي المعالجة الجهاز الموضوع في الاتجاه المطلوب. بما أنّ الافتراض الخاطئ الأكثر شيوعًا لمعاينات الكاميرا هو أنّ التطبيق يعمل على جهاز في الوضع العمودي، يتم عزل دوران الشاشة إلى 0 درجة للتطبيقات التي تطلب الوضع العمودي، و90 درجة للأجهزة التي تطلب الوضع الأفقي.
اقتصاص الكاميرا: إذا تغيّر اتجاه الشاشة، ينعكس ذلك على خلاصة الكاميرا: إذا كان الجهاز في الوضع الأفقي وتم تفعيل المعالجة لتطبيق يطلب الوضع العمودي، يتم اقتصاص مجال رؤية الكاميرا ليشبه مجال رؤية الكاميرا في الوضع العمودي.
تدوير خلاصة الكاميرا واقتصاصها: يتنقّل النظام بين طرق النشاط
onStop()وonStart()(تلقائيًا) أوonPause()وonResume()(يتم تطبيقها من خلال الإعداد OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE لكل تطبيق) بعد تطبيق المعالجة للتأكّد من عرض معاينة الكاميرا بشكل صحيح.
يمكن لمطوّري التطبيقات إلغاء هذه الحلول البديلة إذا كانت التطبيقات تتعامل مع معاينة الكاميرا بشكل صحيح. يُرجى الاطّلاع على عمليات التجاوُز لكل تطبيق.
جارٍ تغيير الحجم
عندما تكون معالجة الاتجاه المطلوب الذي تمت محاكاته نشطة، يؤدي تغيير حجم النافذة إلى تغيير حجم واجهة مستخدم عدسة الكاميرا مع الحفاظ على نسبة العرض إلى الارتفاع. يمكن تغيير حجم بقية نافذة التطبيق بحرية.
تغيير حجم نافذة باستخدام عدسة الكاميرا
اختبار تطبيقك بحثًا عن مشاكل التوافق
لاختبار تطبيقك وفهم سلوكه على أشكال الأجهزة المختلفة، يمكنك الاستفادة من المراجع التالية:
- بث الجهاز: لاختبار تطبيقك على أجهزة الإنتاج (بما في ذلك الأجهزة المرجعية) المستضافة في مراكز بيانات Google، يمكنك الاطّلاع على بث جهاز Android، المستند إلى Firebase
- المحاكيات في استوديو Android: للحصول على معلومات حول إنشاء محاكيات للأجهزة المرجعية، يُرجى الاطّلاع على إنشاء الأجهزة الافتراضية وإدارتها
- محاكي استوديو Android القابل لتغيير الحجم: للحصول على معلومات حول الوصول إلى الأجهزة الافتراضية، يُرجى الاطّلاع على تشغيل التطبيقات على Android Emulator
Is letterboxed
تأكَّد من أنّ كل نشاط يمكنه استخدام كل مساحة العرض المتاحة للتطبيق. أولاً، أعلِن عن الرمز التالي في مجلد الاختبار:
Kotlin
fun isLetterboxed(activity: AppCompatActivity): 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(AppCompatActivity 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(); }
بعد ذلك، يمكنك إجراء اختبار للتأكّد من السلوك والتأكّد من أنّ النشاط المستهدف ليس letterboxed:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertFalse(it.isLetterboxed()) } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); @Test public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity( activity -> { assertFalse(activity.isLetterboxed()); }); } }
من الأفضل إجراء هذا النوع من الاختبارات فقط إلى أن ينجح ويؤكّد أنّ أنشطة تطبيقك تشغل مساحة العرض الكاملة المتاحة للتطبيق. اختبِر تطبيقك على جميع أنواع الأجهزة لضمان اتساق السلوك.
عمليات الإلغاء لكل تطبيق
يوفّر Android عمليات تجاوز تغيّر السلوك الذي تم ضبطه للتطبيقات. على سبيل المثال، يوجّه الإعداد FORCE_RESIZE_APP النظام إلى تجاوز وضع التوافق مع حجم الصفحة وتغيير حجم التطبيق ليتناسب مع أبعاد الشاشة حتى إذا تم تحديد resizeableActivity="false" في بيان التطبيق.
تطبّق الشركات المصنّعة للأجهزة عمليات إلغاء على تطبيقات محدّدة أو جميع التطبيقات على أجهزة معيّنة. على الإصدار 14 من Android (المستوى 34 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن للمستخدمين تطبيق عمليات التجاوز على التطبيقات من خلال إعدادات الجهاز. في الإصدار 16 من Android (مستوى واجهة برمجة التطبيقات 36) والإصدارات الأحدث، يطبّق مالكو الأجهزة الافتراضية عمليات إلغاء على أجهزة محدّدة يديرونها.
عمليات إلغاء الإعدادات لكل تطبيق من قِبل المستخدم
في الإصدار 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إلى أي تأثير.
تحسين تطبيقك لجميع الشاشات: لا تضع قيودًا على نسبة العرض إلى الارتفاع في تطبيقك، بل استخدِم فئات حجم النافذة لإتاحة تنسيقات مختلفة استنادًا إلى مقدار مساحة العرض المتاحة.
عمليات إلغاء الإعدادات لكل تطبيق على الجهاز
تطبّق الشركات المصنّعة للأجهزة ومالكو الأجهزة الافتراضية (تطبيقات محدّدة موثوق بها ومميّزة) عمليات إلغاء على أساس كل تطبيق على أجهزة معيّنة، بما في ذلك الأجهزة اللوحية والأجهزة القابلة للطي وأجهزة ChromeOS وشاشات السيارات. وقد تطبّق الأجهزة المرجعية بعض عمليات الإلغاء على مجموعة متنوعة من التطبيقات تلقائيًا.
يمكن للتطبيقات إيقاف معظم عمليات الإلغاء (راجِع جدول عمليات الإلغاء لكل تطبيق أدناه).
يمكنك اختبار تطبيقك مع تفعيل عمليات الإلغاء أو إيقافها باستخدام إطار عمل التوافق (راجِع أدوات إطار عمل التوافق). عند تفعيل هذه الميزة، يتم تطبيق عمليات التجاوز على التطبيق بأكمله.
يمكنك أيضًا استخدام Android Debug Bridge (adb) لتفعيل أو إيقاف عمليات الإلغاء وتحديد عمليات الإلغاء التي تنطبق على تطبيقك.
يمكنك تفعيل عمليات الإلغاء أو إيقافها على النحو التالي:
adb shell am compat enable/disable <override name/id> <package>
بالنسبة إلى الأجهزة المرجعية، تحقَّق من عمليات الإلغاء التي تنطبق على تطبيقك:
adb shell dumpsys platform_compat | grep <package name>
يتضمّن الجدول التالي قائمة بعمليات الإلغاء المتاحة، بالإضافة إلى إرشادات حول كيفية تحسين تطبيقك لكي لا يحتاج إلى الاعتماد على عمليات الإلغاء. يمكنك إضافة علامات المواقع إلى بيان تطبيقك لإيقاف بعض عمليات الإلغاء.
| عمليات الإلغاء لكل تطبيق | |||
|---|---|---|---|
| النوع | الاسم | رقم التعريف | الوصف |
| التوافق مع أجهزة الإدخال | OVERRIDE_MOUSE_TO_TOUCH | 413207127 | يتم تحويل مثيلات MotionEvent من جهاز ماوس إلى أحداث لمس من خلال إعادة كتابة مصدر MotionEvent ونوع الأداة عند تسليمها إلى التطبيق. |
| إمكانية تغيير الحجم | FORCE_RESIZE_APP | 174042936 | يتم تجاوز وضع التوافق مع الحجم للتطبيق عند تغيير الإعدادات. |
| FORCE_NON_RESIZE_APP | 181136395 | يفرض هذا الإعداد تشغيل التطبيق في وضع التوافق مع حجم الشاشة عند تغيير الإعدادات. | |
| نسبة العرض إلى الارتفاع | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | يجب تفعيل ميزة "تجاوز Gatekeeper" لتطبيق أي عمليات تجاوز أخرى لنسبة العرض إلى الارتفاع. |
| OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | في حال تفعيل هذا الخيار (الخيار التلقائي)، يتم تجاوز نطاق الإلغاء إلى الأنشطة التي تكون في الوضع العمودي فقط. | |
| OVERRIDE_MIN_ASPECT_RATIO_SMALL | 349045028 | يغيّر الحد الأدنى لنسبة العرض إلى الارتفاع إلى 4:3. | |
| OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | يغيّر الحد الأدنى لنسبة العرض إلى الارتفاع إلى 3:2. | |
| OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | يتم تغيير الحد الأدنى لنسبة العرض إلى الارتفاع إلى 16:9. | |
| OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | يغيّر هذا الإعداد الحد الأدنى لنسبة العرض إلى الارتفاع ليتناسب مع% 50 من حجم العرض (أو نسبة العرض إلى الارتفاع في وضع تقسيم الشاشة). | |
| OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | يؤدي هذا الخيار إلى إيقاف تجاهل الحد الأدنى لنسبة العرض إلى الارتفاع، ما يتيح عرض التطبيقات بملء الشاشة عندما يكون الجهاز في الوضع العمودي. | |
| الاتجاه | OVERRIDE_ANY_ORIENTATION | 265464455 | تتيح هذه السياسة إلغاء أي اتجاه. |
| OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | يتجاهل القيود المتعلقة باتجاه الشاشة وإمكانية تغيير الحجم ونسبة العرض إلى الارتفاع. | |
| OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | تتجاهل هذه السياسة الاتجاه ليصبح عموديًا عندما يكون اتجاه النشاط غير محدّد. | |
| OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | يتم إلغاء الاتجاه ليصبح nosensor (استخدام الاتجاه الطبيعي للجهاز) عندما يكون اتجاه النشاط غير محدّد. |
|
| OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | يتم تدوير التطبيقات التي تعمل في الوضع الأفقي فقط بمقدار 180 درجة. | |
| OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | يحدّ من نطاق تجاوز الاتجاه عندما يكون التطبيق متصلاً بالكاميرا. | |
| OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | يضبط الشاشة على الاتجاه الطبيعي الأفقي الثابت عندما تكون المهمة في وضع ملء الشاشة (بما في ذلك عند عرضها في وضع "صندوق الرسائل"). | |
| OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | يتم تجاهل طلبات الاتجاه من التطبيق لتجنُّب تكرار التدوير بشكل لا نهائي. | |
| OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | يتجاهل طلبات الاتجاه المتكررة أثناء إعادة تشغيل نشاط. إذا رصد Android أنّ أحد التطبيقات يطلب اتجاهَين جديدَين على الأقل خلال ثانية واحدة، يعتبر النظام ذلك تكرارًا حلقيًا لا نهائيًا للتدوير ويطبّق الإعدادات البديلة. | |
| OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | يمنع هذا الإعداد ظهور أشرطة سوداء على الشاشة من خلال إيقاف إعداد تجاهل طلب الاتجاه لدى الشركة المصنّعة للجهاز. | |
| واجهات برمجة التطبيقات في وضع الحماية | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | يمنع تغيير سلوك أي واجهات برمجة تطبيقات للعرض. |
| ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | يفرض هذا الإعداد على واجهات برمجة التطبيقات Display في التطبيق عرض حدود التطبيق. تعرض واجهات برمجة التطبيقات Display حدود منطقة العرض المنطقية، ولكن يفترض التطبيق أحيانًا أنّ واجهات برمجة التطبيقات Display تعرض حدود التطبيق، ما يؤدي إلى حدوث مشاكل في واجهة المستخدم. |
|
| OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | يفرض هذا الإعداد على واجهات برمجة تطبيقات View المستخدَمة في التطبيق عرض حدود التطبيق. تعرض واجهات برمجة التطبيقات View حدود منطقة العرض المنطقية، ولكن يفترض التطبيق أحيانًا أنّ واجهات برمجة التطبيقات View تعرض حدود التطبيق، ما يؤدي إلى حدوث مشاكل في واجهة المستخدم. |
|
| توافق الكاميرا | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | يؤدي هذا الخيار إلى إيقاف التدوير الإجباري. بشكل تلقائي، يتم فرض تدوير جميع تطبيقات الكاميرا ذات الاتجاه الثابت عند فتح معاينة الكاميرا. |
| OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION | 398195815 | يؤدي هذا الخيار إلى إيقاف محاكاة معالجة الاتجاه المطلوب لتوافق الكاميرا. يتم تلقائيًا تعديل تطبيقات الكاميرا ذات الاتجاه الثابت استنادًا إلى الاتجاه المطلوب عند فتح معاينة الكاميرا. | |
| 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 إرسال حدث تركيز مزيّف إلى التطبيق، ما يشير إلى التطبيق لبدء رسم المحتوى مرة أخرى. |
| OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS | 388014743 | يستبعد هذا الإعداد العناصر المضمّنة في شريط العناوين من حدود التطبيق في إعدادات النشاط في وضع "العرض في نافذة"، ما يمنع حجب عناصر واجهة المستخدم في أعلى التطبيق أو أسفله بواسطة شريط العناوين أو اقتصاصها عندما لا يتعامل التطبيق مع العناصر المضمّنة في شريط العناوين. | |
OVERRIDE_MOUSE_TO_TOUCH
يؤدي هذا الإعداد إلى تفعيل معالجة التوافق التي تحوّل مثيلات MotionEvent من الماوس أو لوحة اللمس إلى أحداث لمس من خلال إعادة كتابة مصدر MotionEvent إلى SOURCE_TOUCHSCREEN ونوع أداة MotionEvent إلى TOOL_TYPE_FINGER عند إرسال أحداث الحركة إلى التطبيق.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
لا ينطبق. يجب حلّ المشكلة في منطق التطبيق.
كيفية تحسين التطبيقات
يجب أن يتعامل تطبيقك مع أحداث الإدخال من الماوس ولوحة اللمس، بما في ذلك الإيماءات على لوحة اللمس والتمرير بعجلة الماوس. يُرجى الاطّلاع على لوحة المفاتيح والماوس ولوحة اللمس.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
يجب تعريف FEATURE_PC في عنصر <uses-feature> في ملف بيان التطبيق.
<uses-feature android:name="android.hardware.type.pc"
android:required="false" />
ملاحظة: اضبط السمة android:required="false" على "false" لتكون ميزة الكمبيوتر اختيارية ولا يستبعد Google Play التطبيق على الأجهزة غير المخصّصة للكمبيوتر.
علامات الموقع لتعديل الإلغاء
بلا عُري
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة:
adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>
لإزالة الإعدادات التي تم تجاوزها:
adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
FORCE_RESIZE_APP
يفرض هذا الإعداد إمكانية تغيير حجم الحزم التي يتم تطبيق الإلغاء عليها وإمكانية دخولها في وضع النوافذ المتعددة. ينطبق ذلك على جميع أحجام الشاشات.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
في بيان التطبيق، اضبط السمة android:resizeableActivity على true.
كيفية تحسين التطبيقات
استخدِم التنسيقات المتجاوبة/القابلة للتكيّف لتمكين التطبيقات من التكيّف مع جميع أحجام الشاشات ونِسب العرض إلى الارتفاع. يُرجى الاطّلاع على المقالة إتاحة أحجام شاشات مختلفة.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
اضبط علامة السمة PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES على
false.
علامات الموقع لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة وجعل التطبيق قابلاً لتغيير الحجم:
adb shell am compat enable FORCE_RESIZE_APP <package>
لإزالة الإعدادات التي تم تجاوزها:
adb shell am compat disable FORCE_RESIZE_APP <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
FORCE_NON_RESIZE_APP
يفرض هذا الإعداد على الحزم التي يتم تطبيق الإعدادات البديلة عليها أن تكون غير قابلة لتغيير الحجم وأن تدخل في وضع التوافق مع الحجم عند تغيير الإعدادات. ينطبق ذلك على جميع أحجام الشاشات.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
اضبط كلاً من السمة android:resizeableActivity وعلامة البيانات الوصفية android.supports_size_changes على false في بيان التطبيق، وأعلِن عن قيد على الاتجاه أو نسبة العرض إلى الارتفاع.
كيفية تحسين التطبيقات
يجب أن يتم ضبط السمة android:resizeableActivity أو android.supports_size_changes على true في جميع التطبيقات التي تعمل بشكل جيد عند تغيير حجمها.
يجب تحسين التطبيقات الأخرى لتعمل بشكل جيد عند تغيير حجمها. يمكنك الاطّلاع على
android:resizeableActivity.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
اضبط علامة السمة PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES على
false.
علامات الموقع لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة وجعل التطبيق غير قابل لتغيير الحجم:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
لإزالة الإعدادات البديلة:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
OVERRIDE_MIN_ASPECT_RATIO
يتحكّم هذا الإعداد في جميع عمليات الإلغاء التي تفرض حدًا أدنى معيّنًا لنسبة العرض إلى الارتفاع.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
اضبط android:minAspectRatio على مستوى النشاط أو التطبيق.
كيفية تحسين التطبيقات
لا تضبط قيودًا على نسبة العرض إلى الارتفاع في تطبيقك، وتأكَّد من أنّ تطبيقك يتوافق مع أحجام الشاشات المختلفة. استخدِم فئات حجم النافذة لإتاحة تنسيقات مختلفة بناءً على مقدار المساحة التي يشغلها تطبيقك على الشاشة. يُرجى الاطّلاع على
واجهة برمجة التطبيقات Compose WindowSizeClass وواجهة برمجة التطبيقات View
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_SMALL
يضبط الحد الأدنى لنسبة العرض إلى الارتفاع للنشاط على قيمة صغيرة (4:3).
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
يُرجى الاطّلاع على 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_SMALL <package>
لإزالة الإعدادات التي تم تجاوزها:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <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
تتيح عمليات الإلغاء التالية إلغاء أي اتجاه:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
اضبط سمة البيان 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() أو Activity#getRequestedOrientation().
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
لا تضبط سمة البيان
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
تتيح هذه السمة اتجاه nosensor لجميع الأنشطة في الحزمة. OVERRIDE_ANY_ORIENTATION is enabled, the override is used only when no other fixed orientation has been specified by the activity.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION.
علامات الموقع لتعديل الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION.
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
لإزالة الإعدادات التي تم تجاوزها:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
تتيح هذه السمة اتجاه reverseLandscape لجميع الأنشطة في الحزمة. OVERRIDE_ANY_ORIENTATION is enabled, the override is used only when no other fixed orientation has been specified by the activity.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
يمكنك الاطّلاع على 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 على الحِزم مطلقًا
لنشاط وضع التوافق مع الحجم أو وضع Letterbox. تستمر واجهات برمجة التطبيقات Display في توفير حدود مساحة العرض.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
يمكنك الإعلان عن الأنشطة القابلة لتغيير الحجم من خلال ضبط سمة البيان android:resizeableActivity على true أو علامة البيانات الوصفية android.supports_size_changes على true.
كيفية تحسين التطبيقات
يجب ألا تعتمد التطبيقات التي تعلن أنها قابلة لتغيير حجمها بالكامل على حجم العرض لتحديد موضع عنصر في واجهة المستخدم. يجب نقل تطبيقك إلى واجهات برمجة تطبيقات حديثة
توفّر WindowMetrics. إذا كنت تستخدم Jetpack Compose، يمكنك الاستفادة من واجهة برمجة التطبيقات WindowSizeClass لرسم واجهة المستخدم استنادًا إلى مساحة الشاشة التي يشغلها التطبيق على الشاشة الحالية. يُرجى الاطّلاع على
استخدام فئات حجم النافذة.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
لا يمكن إيقاف هذه الميزة. انقل البيانات من واجهات برمجة التطبيقات التي تم إيقافها نهائيًا.
علامات الموقع لتعديل الإلغاء
ما مِن علامات مواقع لهذا التجاوز.
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
لإزالة الإعدادات التي تم تجاوزها:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
ALWAYS_SANDBOX_DISPLAY_APIS
يفرض هذا الإعداد تطبيق وضع الحماية لواجهة برمجة التطبيقات Display دائمًا على الحزم، بغض النظر عن وضع النوافذ. توفّر واجهات برمجة التطبيقات Display دائمًا حدود التطبيق.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
يمكنك الإعلان عن الأنشطة غير القابلة لتغيير الحجم من خلال ضبط السمة android:resizeableActivity على false أو علامة البيانات الوصفية android.supports_size_changes على false.
كيفية تحسين التطبيقات
يجب ألا تعتمد التطبيقات التي تعلن أنها قابلة لتغيير حجمها بالكامل على حجم العرض لتحديد موضع عنصر في واجهة المستخدم. يجب نقل تطبيقك من واجهات برمجة التطبيقات المتوقفة نهائيًا إلى
واجهات برمجة التطبيقات الحديثة التي توفّر WindowMetrics. يمكنك الاطّلاع على
WindowMetricsCalculator.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
لا يمكن إيقاف هذه الميزة. انقل البيانات من واجهات برمجة التطبيقات التي تم إيقافها نهائيًا.
علامات الموقع لتعديل الإلغاء
ما مِن علامات مواقع لهذا التجاوز.
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
لإزالة الإعدادات التي تم تجاوزها:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
يفرض هذا الإعداد على الحزم وضع واجهات برمجة التطبيقات التالية View في وضع الحماية ضمن حدود النشاط:
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
يمكنك حلّ المشكلة في الرمز البرمجي للتطبيق باستخدام واجهات برمجة التطبيقات التي توفّر حدود نافذة التطبيق والإزاحات بالنسبة إلى نافذة التطبيق بدلاً من حدود شاشة الجهاز والإزاحات بالنسبة إلى شاشة الجهاز.
كيفية تحسين التطبيقات
يجب أن تستخدم التطبيقات واجهات برمجة تطبيقات View، مع مراعاة إمكانية تطبيق وضع "صندوق الرسائل" ووضع النوافذ المتعددة على التطبيق. يُرجى الاطّلاع على WindowMetricsCalculator.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
على false.
علامات الموقع لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
لإزالة الإعدادات التي تم تجاوزها:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
لإيقاف ميزة فرض التدوير تحسين تجربة المستخدم في بعض التطبيقات
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
اضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
على false.
كيفية تحسين التطبيقات
لا تعتمد على اتجاه ميزة الاستشعار في الكاميرا أو معلومات الجهاز المخزّنة مؤقتًا. للحصول على إرشادات حول توافق الكاميرا، راجِع مقدّمة حول عدسة الكاميرا وإتاحة استخدام الأسطح القابلة لتغيير الحجم في تطبيق الكاميرا.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
اضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
على true.
علامات الموقع لتعديل الإلغاء
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة التي تزيل ميزة فرض التدوير:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
لإزالة التجاوز، ما يسمح بفرض التبديل:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION
يؤدي هذا الإعداد إلى إيقاف محاكاة معالجة الاتجاه المطلوب للكاميرا. تحسين تجربة المستخدم في بعض التطبيقات
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
اضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION
على false.
كيفية تحسين التطبيقات
لا تعتمد على اتجاه ميزة الاستشعار في الكاميرا أو معلومات الجهاز المخزّنة مؤقتًا. للحصول على إرشادات حول توافق الكاميرا، راجِع مقدّمة حول عدسة الكاميرا وإتاحة استخدام الأسطح القابلة لتغيير الحجم في تطبيق الكاميرا.
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
بما أنّ هذه السمة توقف معالجة التوافق، يمكنك تحسين تجربة المستخدم من خلال مراعاة التغييرات الديناميكية في تدوير الشاشة واتجاه أداة الاستشعار في الجهاز وحجم النافذة والمعاينة.
علامات الموقع لتعديل الإلغاء
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION"
android:value="true|false"/>
أوامر adb لاختبار التجاوز
لتطبيق التجاوز الذي يزيل محاكاة الاتجاه المطلوب:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>
لإزالة الإعدادات التي تم تجاوزها، ما يسمح بمحاكاة الاتجاه المطلوب:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <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>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
يستبعد هذا الإعداد هوامش شريط العناوين من حدود التطبيق في إعدادات النشاط في وضع "العرض في نافذة"، ما يمنع حجب عناصر واجهة المستخدم في أعلى التطبيق أو أسفله بواسطة شريط العناوين أو اقتصاصها عندما لا يتعامل التطبيق مع هوامش شريط العناوين.
في العادة، لا يتم استبعاد هوامش شريط العناوين من حدود التطبيق في الإعدادات، ويتم عرض ارتفاع النافذة بالكامل في Configuration.screenHeightDp وحدود التطبيق، بما في ذلك المنطقة خلف شريط العناوين في وضع العرض في نافذة (شريط العناوين الذي يحتوي على عناصر التحكّم في التصغير والتكبير والإغلاق، والذي يظل مرئيًا حتى في وضع مجسم):
- التطبيقات التي تعرض المحتوى من الحافة إلى الحافة أو التطبيقات الغامرة التي لا تتعامل مع هوامش شريط العناوين: تمتد مساحة تنسيق التطبيق على النافذة بأكملها، لذا إذا لم يرسل التطبيق طلبًا إلى
WindowInsetsلتعويض واجهة المستخدم، يمكن رسم عناصر التحكّم العلوية مباشرةً أسفل شريط العناوين. - التطبيقات التي يفرض النظام فيها استخدام مساحات شريط العناوين: لمنع التطبيق من عرض المحتوى خلف شريط العناوين، ينقل النظام العرض الجذر للتطبيق إلى أسفل شريط العناوين. إذا كان التطبيق يحدّد حجم تنسيقه باستخدام
Configuration.screenHeightDpغير المعدَّل أو حدود التطبيق بدلاً من أبعاد إطار العرض، فإنه يعرض تنسيقًا بارتفاع النافذة الكاملة يبدأ من أسفل شريط العناوين، ما يدفع عناصر واجهة المستخدم السفلية إلى ما بعد الحافة السفلية للنافذة ويؤدي إلى عدم محاذاة مساحات اللمس.
عند تفعيل ميزة التجاوز، يطرح النظام ارتفاع شريط العناوين من حدود التطبيق وConfiguration.screenHeightDp بحيث تتم محاذاة مساحة تنسيق التطبيق مع المساحة أسفل شريط العناوين.
كيفية تحقيق التطبيقات للنتيجة نفسها التي يحقّقها التجاوز
تفعيل ميزة "العرض حتى حافة الشاشة" اطّلِع على ما يلي:
- Compose: لمحة عن حواف النوافذ
- طرق العرض: عرض المحتوى من الحافة إلى الحافة في طرق العرض
- الإعدادات: التغييرات في السلوك: التطبيقات التي تستهدف الإصدار 15 من Android أو الإصدارات الأحدث
كيفية تحسين التطبيقات
يمكنك تجنُّب هذه المشكلة إذا كان تطبيقك يتيح ميزة "العرض حتى حافة الشاشة".
كيفية إيقاف ميزة التجاوز أو إلغاء تفعيلها
اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS على
false.
علامات الموقع لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS"
android:value="true|false"/>
أوامر adb لاختبار التجاوز
لتطبيق الإعدادات البديلة:
adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>
لإزالة الإعدادات التي تم تجاوزها:
adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>
ملاحظة: تطبّق الأوامر التجاوز أو تزيله بشكل مؤقت فقط.
مراجع إضافية
-
مالك الجهاز الافتراضي هو تطبيق موثوق به أو مميّز يدير جهازًا افتراضيًا. ينشئ مالكو الأجهزة الافتراضية أجهزة افتراضية لعرض التطبيقات، ثم يعرضون التطبيقات على أجهزة بعيدة، مثل أجهزة الكمبيوتر الشخصية أو أجهزة الواقع الافتراضي أو أنظمة الترفيه والمعلومات في السيارات. مالك الجهاز الافتراضي يستخدم جهازًا محليًا، مثل هاتف. ↩