ينشط Android وضع التوافق للتطبيقات التي توضح القيود المفروضة على الاتجاه أو قابلية إعادة الضبط. يضمن وضع التوافق سلوكًا مقبولًا للتطبيق على الأجهزة ذات الشاشات الكبيرة والهواتف المزوّدة بشاشة قابلة للطي، ولكن مع سهولة استخدام دون المستوى المطلوب.
تتيح عمليات إلغاء الإعدادات على مستوى التطبيق لصنّاع الأجهزة تغيير سلوك التطبيقات لتحسين تجربة المستخدم أو منع تعطُّل التطبيقات على أجهزة معيّنة.
الأجهزة المرجعية
قد تتطلّب الأجهزة التالية عمليات إلغاء لكل تطبيق بسبب عمليات ضبط أو إعدادات غير معتادة لا تتوافق مع التطبيقات:
- الأجهزة اللوحية: يكون الاتجاه الطبيعي لبعض الأجهزة اللوحية، مثل Pixel Tablet،
الوضع الأفقي. يكون الجهاز في اتجاهه الطبيعي عند عرض
Display#getRotation()
علىSurface.ROTATION_0
. إذا كانت التطبيقات تفترض أنّROTATION_0
في الوضع العمودي، قد لا تتطابق تنسيقات التطبيقات ومعاينة الكاميرا مع شاشة الجهاز. - الهواتف القابلة للطيّ الأفقية: تكون بعض الأجهزة القابلة للطيّ، مثل Pixel Fold، في الاتجاه العمودي عند طيّها، ولكنّها تكون باتجاه أفقي عند طيّها. إذا افترضت التطبيقات أن الاتجاه غير المطوي يكون في الوضع العمودي، من المحتمل أن تكون حلقات الوميض أو مشاكل في التنسيق.
- الهواتف القابلة للطيّ: عادةً ما تكون الهواتف غير المطوية في الاتجاه العمودي. ولكن عند طي الهاتف، يتم عادةً عرض شاشة صغيرة في الاتجاه الأفقي. يجب أن ترصد التطبيقات مختلف اتجاهات الشاشات وتتلاءم معها.
المشاكل الشائعة المتعلّقة بالتوافق
تحدث مشاكل التوافق في التطبيقات غالبًا بسبب القيود المفروضة على اتجاه التطبيق، والقيود المفروضة على إمكانية تغيير الحجم ونسبة العرض إلى الارتفاع، والمعالجة غير الصحيحة لاتجاه معاينة الكاميرا، وإساءة استخدام واجهات برمجة التطبيقات.
ليتيربوكسينغ
تضع ميزة "عرض شاشة عريضة أفقيًا" التطبيق في وسط الشاشة أو على أحد جانبيها على الشاشات الكبيرة لتسهيل الوصول إليه. تملأ درجات اللون (الأشرطة ذات الألوان الخالصة أو الخلفية المموّهة) منطقة العرض غير المستخدمة على طول الجوانب أو الجزء العلوي والسفلي من التطبيق.
غالبًا ما يتم تطبيق Letterbox على الأجهزة ذات الشاشات الكبيرة لأن الأبعاد ونسبة العرض إلى الارتفاع لشاشة الجهاز عادةً ما تكون مختلفة عن أبعاد الهواتف العادية التي صُممت معظم التطبيقات من أجلها.
المشكلة
لا يتوافق التطبيق مع جميع إعدادات العرض لأنّ التطبيق له اتجاه ثابت أو نسبة عرض إلى ارتفاع ثابتة أو لا يمكن تغيير حجمه.
تشمل إعدادات الضبط التي تتحكّم في اتجاه التطبيق وإمكانية تغيير حجمه ما يلي:
screenOrientation
: تحدِّد هذه السياسة اتجاهًا ثابتًا للتطبيق. يمكن للتطبيقات أيضًا ضبط الاتجاه في وقت التشغيل باستخدامActivity#setRequestedOrientation()
.resizeableActivity
: يشير إلى ما إذا كان بإمكان النظام تغيير حجم التطبيقات لتلائم النوافذ ذات الأبعاد المختلفة. في نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) والإصدارات الأقدم، يحدِّد هذا الإعداد ما إذا كانت التطبيقات تتيح وضع النوافذ المتعددة. في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يتم تحديد ما إذا كانت التطبيقات تتيح وضع النوافذ المتعددة على الشاشات الصغيرة (فئة حجم النافذة المكثفة). على نظام التشغيل Android 12 والإصدارات الأحدث، تسمح التطبيقات باستخدام وضع "تعدد النوافذ" على الشاشات الكبيرة (فئة حجم النافذة متوسطة أو موسّعة) بغض النظر عن هذا الإعداد.maxAspectRatio
: تُستخدَم لتحديد الحدّ الأقصى لنسبة العرض إلى الارتفاع التي يتيحها التطبيق. ولا يمكن ضبطmaxAspectRatio
إلا للتطبيقات التي تم ضبطresizeableActivity
علىfalse
لها.
minAspectRatio
: لتحديد الحد الأدنى لنسبة العرض إلى الارتفاع التي يتوافق معها التطبيق. يمكن فقط للتطبيقات التي تم ضبطresizeableActivity
فيها علىfalse
ضبطminAspectRatio
.
تحسين
يجب أن يكون التطبيق متوافقًا مع جميع اتجاهات شاشة الجهاز ووضع النوافذ المتعددة وأحجامها. أزِل جميع القيود المفروضة على الاتجاهات ونسبة العرض إلى الارتفاع الثابتة من تنسيقات التطبيق وملف بيان التطبيق.
حل بديل التوافق
إذا كان تطبيقًا باتجاه ثابت أو نسبة عرض إلى ارتفاع ثابتة يتم تشغيله في نافذة لا يتيح فيها التطبيق حجم النافذة أو اتجاهها مباشرةً، يعرض Android التطبيق بتنسيق مربّع للحفاظ على الاستمرارية.
بدءًا من Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والاستمرار في الإصدار 12L (المستوى 32 لواجهة برمجة التطبيقات)، يطبّق النظام الأساسي مجموعة متنوعة من التحسينات على التطبيقات المصمّمة للعرض على شاشة عريضة أفقيًا. ينفّذ المصنّعون التحسينات على واجهة المستخدم. لن تحتاج إلى إجراء أي تطوير إضافي لتطبيقك للاستفادة من التحسينات.
يقدّم الإصدار Android 12 (المستوى 31 من واجهة برمجة التطبيقات) التحسينات الجمالية التالية التي يمكن للشركات المصنّعة للأجهزة ضبطها:
- الزوايا المستديرة: تكون زوايا نافذة التطبيق أكثر تنقيحًا.
- شفافية شريط النظام: تكون أشرطة الحالة والتنقل التي تتراكب على التطبيق شبه شفافة، ما يجعل الرموز على الأشرطة قابلة للعرض دائمًا على خلفية مربع الحروف.
- نسبة العرض إلى الارتفاع القابلة للتهيئة: يمكن تعديل نسبة العرض إلى الارتفاع للتطبيق لتحسين مظهره.
يضيف الإصدار 12L (المستوى 32 من واجهة برمجة التطبيقات) التحسينات الوظيفية التالية:
إمكانية ضبط الموضع: على الشاشات الكبيرة، يمكن للشركات المصنّعة للأجهزة وضع التطبيق على الجانب الأيسر أو الأيمن من الشاشة، ما يجعل التفاعل أسهل.
زر إعادة التشغيل الذي تمت إعادة تصميمه: يمكن لصنّاع الأجهزة منح زر إعادة التشغيل لميزة وضع التوافق مع الحجم مظهرًا جديدًا ليتمكّن المستخدمون من التعرّف عليه بشكل أفضل.
في Android 13 (المستوى 33 من واجهة برمجة التطبيقات) ستتم إضافة مربّع حوار لتعريف المستخدم على كيفية وضع التطبيق المُعدّ للعرض على شاشة عريضة أفقيًا أو عموديًا في وضع تقسيم الشاشة:
وضع توافق الحجم
وضع توافق الحجم هو برنامج مُعدّ للعرض على شاشة عريضة أفقيًا يتضمّن عنصر تحكُّم في إعادة التشغيل. يتيح عنصر التحكّم للمستخدمين إعادة تشغيل التطبيق وإعادة رسم الشاشة. يستدعي Android وضع توافق الحجم للتطبيقات التي تبيّن أنها غير قابلة لتغيير الحجم. عند نقل نشاط إلى حاوية عرض غير متوافقة مع أبعاد النشاط، قد يُعيد النظام ضبط حجم التطبيق لملء شاشة عرض الجهاز ببُعد واحد على الأقل.
تشمل تغييرات إعدادات الجهاز التي يمكن أن تؤدي إلى تفعيل وضع التوافق مع الحجم ما يلي:
- تدوير الجهاز
- جهاز قابل للطيّ أو غير قابل للطي
- التبديل بين وضعَي العرض "ملء الشاشة" و"تقسيم الشاشة"
المشكلة
ينطبق وضع التوافق مع الحجم عادةً على الأنشطة التي يتم تقييد اتجاهها أو نسبة العرض إلى الارتفاع فيها ويتم ضبطها (أو تحديدها من قِبل النظام) لتكون غير قابلة للتغيير.
يُعتبَر تطبيقك قابلاً لتغيير الحجم ولن يتم إدراجه في وضع التوافق مع الحجم إذا استوفى أيًّا من المعايير التالية:
- يمكن تغيير حجمها باستخدام
resizeableActivity="true"
- يتيح وضع نافذة ضمن النافذة (PIP).
- مضمّنة
- تم تطبيق
FORCE_RESIZE_APP
على مستوى التطبيق من قِبل الشركة المصنّعة للجهاز (يتم تجاهل الخصائص التي يضبطها التطبيق)
إذا لم يستوفِ تطبيقك أيًا من الشروط، سيتم اعتبار أنه لا يمكن تغيير حجمه ويمكن وضعه في وضع توافق الحجم.
تحسين
يجب أن يعمل التطبيق مع جميع أحجام العرض. يمكنك تغيير حجم تطبيقك من خلال ضبط السمة
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 على أنّه "يجب توجيه كاميرا رصد الصور بحيث يكون الجانب الطويل من الكاميرا ALIGNED مع الجانب الطويل من الشاشة".
غالبًا ما تفترض التطبيقات أنّ اتجاه الجهاز واتجاه أداة استشعار الكاميرا هو عمودي، وهو افتراض معقول على الهواتف الجوّالة العادية. ولكن يمكن أن يكون الاتجاه الطبيعي للأجهزة اللوحية وأجهزة الكمبيوتر المحمول وأجهزة استشعار الكاميرا أفقيًا. بالإضافة إلى ذلك، يمكن أن تتضمّن أشكال الأجهزة الجديدة، مثل الأجهزة القابلة للطي، عدة اتجاهات طبيعية والعديد من أدوات استشعار الكاميرا باتجاهات مختلفة.
عند بدء نشاط ما باتجاه الكاميرا، لا يتوقع التطبيق أو التبديل بين كاميرات أو شاشات مختلفة في الجهاز (بالنسبة إلى الأجهزة القابلة للطي) معاينة الكاميرا في وضع غير محاذٍ أو مشوّه.
تحسين
يجب أن ترصد تطبيقات الكاميرا بشكل صحيح وتوجِّه اتجاه الجهاز واتجاه كاميرا الاستشعار لتقديم معاينة للكاميرا تكون مُحسَّنة ومستوية بشكل صحيح. ويجب أن تحتسب التطبيقات دوران الجهاز ودوران أداة الاستشعار ونسبة عرض إلى ارتفاع الشاشة أو النافذة، ثم تُطبّق النتائج على معاينة الكاميرا. للحصول على إرشادات تفصيلية، يُرجى الاطّلاع على مقالتَي معاينة الكاميرا ولمحة عن عدسة الكاميرا المخصّصة للعرض.
حل بديل التوافق
يكون الجهاز في الوضع الطبيعي عندما يعرض Display#getRotation()
Surface.ROTATION_0
. يحتسب النظام قيمة
CameraCharacteristics.SENSOR_ORIENTATION
من الاتجاه الطبيعي للجهاز. ينسِّق نظام التشغيل Android نافذة الوضع العمودي
للتطبيقات المخصّصة للوضع العمودي مع الاتجاه الطبيعي للجهاز، وهو
ما تتوقّعه معظم التطبيقات. يقتصّ Android أيضًا صورة أداة الاستشعار في الكاميرا عندما يكون
اتجاه أداة الاستشعار أفقيًا وتكون معاينة الكاميرا رأسية. تشمل الحلول البديلة المتعلّقة بالملف الشخصي على Google ما يلي:
فرض تدوير معاينات الكاميرا للتطبيقات المخصّصة للوضع العمودي: تتطلّب التطبيقات المخصّصة للوضع العمودي أن يكون الوضع الطبيعي للجهاز ووضع أداة استشعار الكاميرا عموديًا. ومع ذلك، في نظام التشغيل Android 12 (مستوى واجهة برمجة التطبيقات 31) والإصدارات الأحدث، يمكن تشغيل التطبيقات في اتّجاهات متعدّدة للأجهزة إذا تجاهلت الشركات المصنّعة للأجهزة مواصفات الاتجاهات.
عند توصيل تطبيق محظور على الوضع العمودي بالكاميرا، يُجبر نظام Android التطبيق على التبديل إلى الوضع العمودي لمحاذاة نافذة التطبيق العمودية مع الوضع الطبيعي للجهاز.
على بعض الأجهزة اللوحية (راجِع الأجهزة المرجعية)، يتم تدوير نافذة التطبيق عموديًا إلى شاشة كاملة عمودية لمواءمة الوضع الطبيعي للجهاز. يشغل التطبيق الشاشة بالكامل بعد إجباره على التدوير.
على الشاشة الداخلية الأفقية للأجهزة القابلة للطي (راجِع الأجهزة المرجعية)، يتم تدوير الأنشطة في الوضع العمودي فقط إلى الوضع الأفقي لتتماشى مع الاتجاه الطبيعي غير المطوي. يتم عرض التطبيق مأخوذًا ضمن شريط أفقي بعد فرض الدوران.
اقتصاص الكاميرا الأمامية الداخلية: تكون أداة الاستشعار في الكاميرا الأمامية الداخلية في بعض الأجهزة القابلة للطيّ في الاتجاه الأفقي. فضلاً عن فرض تدوير معاينة الكاميرا على الشاشة الداخلية القابلة للطي، يقتصّ Android مجال رؤية الكاميرا الأمامية (الأفقية) بحيث تلتقط أداة الاستشعار مشهدًا عكسيًا.
فرض إعادة تحميل معاينات الكاميرا: ينتقل النظام بين أسلوبَي Activity
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
،
أنماطًا تجعل الأنشطة شفافة.
لا تغطي الأنشطة الشفافة جميع مساحة العرض المتاحة، ما يجعل من الصعب إدارتها لأنّ مساحة العرض المتاحة قد تتغيّر بناءً على تغييرات الضبط، مثل دوران الجهاز وطي الجهاز وفتحه ووضع النوافذ المتعددة.
المشكلة
يجب أن يتوافق النشاط الشفاف مع حدود أول نشاط مبهم أسفل النشاط الشفاف في حزمة أنشطة المهمة. ومع ذلك، يمكن أن يكون النشاط غير الشفاف الذي يطلق مربع حوار الأذونات ترامبولين (نشاطًا يطلق نشاطًا آخر ثم يختفي)، وبالتالي لا يمكن للنظام تحديد حدود نشاط الترامبولين الذي شغّل نشاط مربّع حوار الأذونات الشفافة.
تحسين
تكتسِب الأنشطة الشفافة قيودها من النشاط غير الشفاف الأعلى منها في تسلسل أنشطة المهمة. ويجب أن يكون النشاط المبهم متاحًا لدورة حياة النشاط الشفاف بالكامل، بدءًا من إنشاء النشاط إلى تدميره. لهذا السبب، لا تبدأ طلبات الأذونات من أنشطة الترامبولين.
إذا أدّى نشاط ترامبولين إلى طلب إذن، قد لا يتمكّن المستخدم من رؤية مربّع حوار الإذن لأنّه سيتم تدمير نشاط الترامبولين قبل أن تتاح للمستخدم فرصة الردّ على مربّع الحوار، وقد يكون قد تم احتساب الأبعاد وموضع نشاط مربّع الحوار بشكل غير صحيح.
يجب أن تطلب التطبيقات دائمًا الأذونات من الأنشطة التي تظل مرئية إلى أن يتخذ المستخدم قرارًا بشأنها.
زوايا مستديرة
يمكن أن يكون النشاط شفافًا بسبب نمط يحدد شفافية الخلفية أو لأنّ محتوى النشاط لا يملأ مساحة العرض المتاحة. إذا كان النشاط الشفاف يملأ مساحة العرض المتاحة، يطبّق النظام تلقائيًا زوايا دائرية على النشاط عند ضبطه للقيام بذلك من قِبل الشركة المصنّعة للجهاز. ولكن إذا لم يملؤ النشاط الشفاف (مثل مربع diálogo الحصول على الإذن) المساحة المتوفّرة، يعود الأمر إليك في تحديد ما إذا كنت تريد تطبيق زوايا مُدوَّرة أم لا.
لا تملأ مربّعات حوار الأذونات مساحة العرض المتاحة لأنّ تنسيق مربّع الحوار يستخدم عادةً LayoutParams.WRAP_CONTENT بدلاً من LayoutParams.MATCH_PARENT.
حلّ بديل للتوافق
يجب إبقاء الأنشطة التي تنشئ أنشطة مربّعات الحوار مرئية إلى أن يردّ المستخدم على مربّع الحوار.
يضمن النظام أن النشاط الشفاف يكتسب جميع القيود من أول نشاط مبهم أسفل النشاط الشفاف في حزمة الأنشطة، بما في ذلك القيود المتعلقة بما يلي:
- وضع توافق الحجم
- الاتجاه
- نسبة العرض إلى الارتفاع
ألعاب Unity
يتم تشغيل ألعاب Unity على Android بملء الشاشة أو في وضع النوافذ المتعدّدة. مع ذلك، تفقد العديد من ألعاب Unity تركيزها وتتوقّف عن رسم المحتوى عند استخدام وضع النوافذ المتعددة.
المشكلة
أضاف Unity الخيار Resizable Window
في Unity 2019.4 للتوافق مع وضع النوافذ المتعددة على Android. مع ذلك، لم يتفاعل التنفيذ الأولي مع دورة حياة النشاط في وضع النوافذ المتعددة بشكل صحيح، ما تسبّب في تعليق UnityPlayer التشغيل عندما يفقد التطبيق التركيز. عرض المشغّل شاشة
سوداء أو الإطار الأخير المتوقّف للّعبة. لا يتم استئناف اللعب إلا عندما
ينقر المستخدم على الشاشة. تواجه العديد من التطبيقات التي تستخدم محرّك Unity هذه المشكلة
وتظهر كنافذة سوداء في وضع النوافذ المتعددة.
تحسين
عليك ترقية Unity إلى الإصدار 2019.4.40 أو إصدار أحدث وإعادة تصدير لعبتك. احرص على وضع علامة في المربّع بجانب الخيار
Resizable Window
في
إعدادات مشغّل Android، وإلا
ستتوقف اللعبة مؤقتًا عندما لا تكون في المقدّمة حتى لو كانت مرئية بالكامل في
وضع "النوافذ المتعددة".
حل بديل التوافق
يمكن للشركات المصنّعة للأجهزة تطبيق
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
إلغاء كل تطبيق من أجل توفير حدث تركيز وهمي لأحد التطبيقات في
وضع النوافذ المتعددة. يمكّن الإلغاء النشاط من إعادة رسم المحتوى
ولا يتم حجبه.
اختبار تطبيقك بحثًا عن مشاكل التوافق
لاختبار تطبيقك ومعرفة سلوكه على أشكال الأجهزة المختلفة، يمكنك الاستفادة من المراجع التالية:
- بث بيانات الجهاز: لاختبار تطبيقك على أجهزة الإنتاج (بما في ذلك الأجهزة المرجعية) المستضافة في مراكز بيانات Google، يمكنك الاطّلاع على بث أجهزة Android، بواسطة Firebase
- المحاكيات في Android Studio Hedgehog: للحصول على معلومات حول إنشاء أدوات محاكاة للأجهزة المرجعية، يُرجى الاطّلاع على المقالة إنشاء الأجهزة الافتراضية وإدارتها.
- محاكي Android Studio القابل للتغيير حجمه: للحصول على معلومات عن الوصول إلى الأجهزة الافتراضية، اطّلِع على مقالة تشغيل التطبيقات على "محاكي Android".
مُعد للعرض على شاشة عريضة أفقيًا
تأكَّد من أنّ كل نشاط يمكنه استخدام كل مساحة العرض المتاحة للتطبيق. أولاً، أدخِل الرمز التالي في مجلد الاختبار:
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
بعد ذلك، نفِّذ اختبارًا لتأكيد السلوك والتأكّد من أنّ النشاط المستهدف ليس مُعدًّا للعرض على شاشة عريضة أفقيًا:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
من الأفضل عدم إجراء هذا النوع من الاختبارات إلا بعد اجتيازه والتأكّد من أنّ أنشطة تطبيقك تشغل مساحة العرض الكاملة المتاحة للتطبيق. اختبِر تطبيقك على جميع أنواع الأجهزة لضمان اتّباعه لسلوك متّسق.
عمليات إلغاء الإعدادات لكل تطبيق
يقدّم نظام التشغيل Android إعدادات إلغاء تُغيّر السلوك الذي تم ضبطه للتطبيقات. على سبيل المثال، يوجّه العنصر النائب FORCE_RESIZE_APP
النظام إلى تجاوز وضع التوافق مع الحجم وتغيير حجم التطبيق ليناسب سمات الشاشة حتى إذا تم تحديد resizeableActivity="false"
في بيان التطبيق.
تطبِّق الشركات المصنّعة للأجهزة عمليات الإلغاء على تطبيقات محدّدة أو على جميع التطبيقات على أجهزة معيّنة ذات شاشات كبيرة. في نظام التشغيل Android 14 (المستوى 34 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكن للمستخدمين تطبيق عمليات الإلغاء على التطبيقات من خلال إعدادات الجهاز.
إلغاءات المستخدم لكل تطبيق
في نظام التشغيل Android 14 والإصدارات الأحدث، تتيح قائمة الإعدادات للمستخدمين تغيير نسبة العرض إلى الارتفاع للتطبيقات. توفّر الأجهزة ذات الشاشات الكبيرة، مثل أجهزة مقارنة الأسعار، القائمة.
تحتوي القائمة على قائمة بجميع التطبيقات المثبَّتة على الجهاز. يختار المستخدمون أحد التطبيقات، ثم يضبطون نسبة العرض إلى الارتفاع للتطبيق على 3:4 أو 1:1 أو ملء الشاشة أو أي قيمة أخرى يضبطها المصنّع يمكن للمستخدمين أيضًا إعادة ضبط نسبة العرض إلى الارتفاع على الإعداد التلقائي للتطبيق، والذي تم تحديده في بيان التطبيق.
يمكن للتطبيقات إيقاف ميزة تجاوز التوافق من خلال ضبط علامات PackageManager.Property
التالية:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
لإيقاف ميزة إلغاء التوافق مع نسبة العرض إلى الارتفاع الخاصة بالمستخدم، أضِف السمة إلى بيان التطبيق واضبط القيمة على
false
:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
سيتم استبعاد تطبيقك من قائمة التطبيقات في إعدادات الجهاز. لن يتمكن المستخدمون من إلغاء نسبة العرض إلى الارتفاع للتطبيق.
ولا يُحدث ضبط هذه السمة على
true
أي تأثير.Property_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
لإيقاف خيار ملء الشاشة لإلغاء توافق نسبة العرض إلى الارتفاع الخاصة بالمستخدم، أضِف السمة إلى بيان التطبيق واضبط القيمة على
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
تمت إزالة خيار ملء الشاشة من قائمة خيارات نسبة العرض إلى الارتفاع في إعدادات الجهاز. لن يتمكّن المستخدمون من تطبيق ميزة إلغاء العرض بملء الشاشة على تطبيقك.
وليس هناك أي تأثير لضبط هذه السمة على
true
.
تحسين تطبيقك لجميع الشاشات: لا تضبط أي قيود على نسبة العرض إلى الارتفاع في تطبيقك، أو استخدِم فئات حجم النافذة لإتاحة التنسيقات المختلفة استنادًا إلى مقدار مساحة العرض المتاحة.
عمليات الإلغاء حسب التطبيق للشركة المصنّعة للجهاز
يطبّق مصنعو الأجهزة عمليات إلغاء على أساس كل تطبيق على أجهزة محدّدة. قد تطبِّق الأجهزة المرجعية بعض عمليات الاستبدال على مجموعة متنوعة من التطبيقات تلقائيًا.
يمكن للتطبيقات إيقاف معظم عمليات إلغاء الإعدادات (اطّلِع على جدول عمليات إلغاء الإعدادات الخاصة بكل تطبيق أدناه).
يمكنك اختبار تطبيقك مع تفعيل عمليات الإلغاء أو إيقافها باستخدام إطار عمل التوافق (راجِع أدوات إطار عمل التوافق). عند تفعيل هذا الإعداد، يتم تطبيق عمليات الإلغاء على التطبيق بالكامل.
يمكنك أيضًا استخدام Android Debug Bridge (adb) لتفعيل عمليات الاستبدال أو إيقافها وتحديد عمليات الاستبدال التي تنطبق على تطبيقك.
فعِّل عمليات الاستبدال أو أوقِفها على النحو التالي:
adb shell am compat enable/disable <override name/id> <package>
بالنسبة إلى الأجهزة المرجعية، تحقَّق من عمليات الاستبدال التي تنطبق على تطبيقك:
adb shell dumpsys platform_compat | grep <package name>
يسرد الجدول التالي عمليات الإلغاء المتاحة بالإضافة إلى إرشادات حول كيفية تحسين تطبيقك حتى لا يحتاج إلى الاعتماد على عمليات الإلغاء. يمكنك إضافةعلامات خاصة بالملكية إلى ملف بيان تطبيقك لإيقاف بعض عمليات الاستبدال.
عمليات الإلغاء حسب التطبيق | |||
---|---|---|---|
النوع | الاسم | رقم التعريف | الوصف |
إمكانية تغيير الحجم | FORCE_RESIZE_APP | 174042936 | لتجاوز وضع توافق الحجم للتطبيق عند تغييرات الإعدادات. |
FORCE_NON_RESIZE_APP | 181136395 | فرض وضع التوافق مع الحجم على التطبيق عند تغيير الإعدادات | |
نسبة العرض إلى الارتفاع | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | تجاوز سياسة البوابة التي يجب تفعيلها لتطبيق أي عمليات إلغاء أخرى لنسبة العرض إلى الارتفاع |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | في حال تفعيل هذه السياسة (الإعداد التلقائي)، يتم إلغاء النطاق على الأنشطة في الوضع العمودي فقط. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | تغيير الحد الأدنى لنسبة العرض إلى الارتفاع إلى 3:2 | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | تغيير الحد الأدنى لنسبة العرض إلى الارتفاع إلى 16:9 | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | يغيّر هذا الخيار الحدّ الأدنى لنسبة العرض إلى الارتفاع ليتناسب مع% 50 من حجم العرض (أو نسبة العرض إلى الارتفاع في وضع تقسيم الشاشة). | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | إيقاف إلغاء الحد الأدنى لنسبة العرض إلى الارتفاع حتى تظهر التطبيقات بملء الشاشة عندما يكون الجهاز في الوضع العمودي | |
الاتجاه | OVERRIDE_ANY_ORIENTATION | 265464455 | يتيح إلغاء أي اتجاه. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | لإلغاء القيود المفروضة على الاتجاه وقابلية إعادة التعديل ونسبة العرض إلى الارتفاع. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | تلغي هذه السمة الاتجاه ليصبح عموديًا عندما يكون للنشاط اتجاه غير محدّد. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | يتم إلغاء الاتجاه ليكون nosensor (استخدِم الاتجاه الطبيعي للجهاز) عندما يكون للنشاط اتجاه غير محدد. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | تدوير التطبيقات في الوضع الأفقي فقط بزاوية 180 درجة | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | تحدد هذه السياسة نطاق إلغاء الاتجاه بالوقت الذي يكون فيه التطبيق مرتبطًا بالكاميرا. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | ضبط الشاشة على الوضع الأفقي الطبيعي الثابت عندما تكون المهمة بملء الشاشة (بما في ذلك عند عرضها بتنسيق إطار عريض أفقي) | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | وتتجاهل طلبات الاتجاه من التطبيق لتجنب التكرارات اللانهائية للتدوير. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | تتجاهل طلبات الاتجاه المتكرّرة أثناء إعادة تشغيل نشاط. إذا اكتشف Android أنّ أحد التطبيقات يطلب اتجاهين جديدين على الأقل في غضون ثانية واحدة، يعتبر النظام هذا الإجراء تكرارًا لا نهائي للدوران ويطبّق الإلغاء. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | يمنع وضع الصورة على شكل مستطيل أفقي من خلال إيقاف إعداد طلب تجاهل الاتجاه الذي تحدّده الشركة المصنّعة للجهاز. | |
واجهات برمجة تطبيقات 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
تفرض هذه السياسة إمكانية تغيير حجم الحِزم التي يتم تطبيق الإلغاء عليها. لا يغيّر هذا الإعداد ما إذا كان من الممكن وضع التطبيق في وضع النوافذ المتعددة، ولكنه يتيح للتطبيق تغيير الحجم بدون الدخول في وضع توافق الحجم عند تغيير حجم الشاشة.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
في بيان التطبيق، يمكنك ضبط سمة
android:resizeableActivity
على true
أو، لسماح التطبيق بتغيير الحجم مع إيقاف وضع "النوافذ المتعددة" باستخدام
android:resizeableActivity=false
، يمكنك ضبط علامة البيانات الوصفية android.supports_size_changes
على true
.
كيفية تحسين التطبيقات
استخدِم التصاميم المتجاوبة/التكيّفية لتمكين التطبيقات من التكيّف مع جميع أحجام العرض ونِسب العرض إلى الارتفاع. يُرجى الاطّلاع على مقالة إتاحة أحجام الشاشات المختلفة.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
اضبط علامة السمة PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
على
false
.
علامات الموقع لتعديل إلغاء الإعدادات
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق الإعدادات الجديدة وجعل التطبيق قابلاً للتغيير، اتّبِع الخطوات التالية:
adb shell am compat enable FORCE_RESIZE_APP <package>
لإزالة الإلغاء:
adb shell am compat disable FORCE_RESIZE_APP <package>
ملاحظة: يتم تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
FORCE_NON_RESize_APP
يفرض هذا الخيار على الحِزم التي يتم تطبيق التجاوز عليها أن تكون غير قابلة للتغيير ويؤدي إلى دخولها في وضع التوافق مع الحجم عند تغيير الإعدادات.
كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"
اضبط كلّ من سمة android:resizeableActivity
وعلامةandroid.supports_size_changes
للبيانات الوصفية على false
في ملف بيان التطبيق،
وأدخِل قيودًا على الاتجاه أو نسبة العرض إلى الارتفاع.
كيفية تحسين التطبيقات
يجب ضبط كل التطبيقات التي تعمل بشكل جيد عند تغيير حجمها على
android:resizeableActivity
أو android.supports_size_changes
على true
.
يجب تحسين التطبيقات الأخرى لتعمل بشكل جيد عند تغيير حجمها. راجِع android:resizeableActivity.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
اضبط علامة السمة PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
على
false
.
علامات الموقع لتعديل إلغاء الإعدادات
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق الإلغاء وجعل التطبيق لا يمكن تغيير حجمه:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
OVERRIDE_MIN_ASPECT_RATIO
عنصر التحكّم في جميع عمليات الاستبدال التي تفرض حدًا أدنى معيّنًا لنسبة العرض إلى الارتفاع
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"
اضبط android:minAspectRatio
على مستوى النشاط أو التطبيق.
كيفية تحسين التطبيقات
لا تفرض قيودًا على نسبة العرض إلى الارتفاع في تطبيقك، واحرص على أن يكون تطبيقك متوافقًا مع
أحجام شاشات مختلفة. استخدِم فئات أحجام النوافذ
لتفعيل تخطيطات مختلفة استنادًا إلى مقدار المساحة التي يشغلها تطبيقك على
الشاشة. يمكنك الاطّلاع على Compose WindowSizeClass
API
وView WindowSizeClass
API.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
حدِّد قيدًا على نسبة العرض إلى الارتفاع أو اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
على false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
ملاحظة: يتم تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
تُقيِّد هذه السياسة إعدادات التطبيقات التي تفرض حدًا أدنى معيّنًا لنسبة العرض إلى الارتفاع للأنشطة
التي لها اتجاه عمودي فقط. تكون مفعَّلة تلقائيًا ولا تسري إلا
إذا كانت OVERRIDE_MIN_ASPECT_RATIO
مفعَّلة أيضًا.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
راجع OVERRIDE_MIN_ASPECT_RATIO.
كيفية تحسين التطبيقات
راجع OVERRIDE_MIN_ASPECT_RATIO.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
راجِع OVERRIDE_MIN_ASPECT_RATIO.
علامات الموقع لتعديل إلغاء الإعدادات
راجع OVERRIDE_MIN_ASPECT_RATIO.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
ضبط الحد الأدنى لنسبة العرض إلى الارتفاع للنشاط على قيمة متوسطة (3:2)
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
راجِع OVERRIDE_MIN_ASPECT_RATIO.
كيفية تحسين التطبيقات
راجع OVERRIDE_MIN_ASPECT_RATIO.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
راجِع OVERRIDE_MIN_ASPECT_RATIO.
علامات الخصائص لتعديل الإلغاء
راجِع OVERRIDE_MIN_ASPECT_RATIO.
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
تعيين الحد الأدنى لنسبة العرض إلى الارتفاع للنشاط على قيمة كبيرة (16:9)
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
راجع OVERRIDE_MIN_ASPECT_RATIO.
كيفية تحسين التطبيقات
راجِع OVERRIDE_MIN_ASPECT_RATIO.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
راجِع OVERRIDE_MIN_ASPECT_RATIO.
علامات الموقع لتعديل إلغاء الإعدادات
راجِع OVERRIDE_MIN_ASPECT_RATIO.
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
تتيح هذه السياسة استخدام نسبة العرض إلى الارتفاع في وضع تقسيم الشاشة. يسمح للتطبيق باستخدام كل المساحة المتاحة في وضع تقسيم الشاشة، ما يتجنّب اقتصاص المحتوى.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
راجع OVERRIDE_MIN_ASPECT_RATIO.
كيفية تحسين التطبيقات
راجِع OVERRIDE_MIN_ASPECT_RATIO.
كيفية إيقاف الإلغاء أو إيقافه
راجع OVERRIDE_MIN_ASPECT_RATIO.
علامات الخصائص لتعديل الإلغاء
راجِع OVERRIDE_MIN_ASPECT_RATIO.
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
لإيقاف الحد الأدنى لنسبة العرض إلى الارتفاع في وضع ملء الشاشة العمودي لاستخدام كل مساحة الشاشة المتاحة.
كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"
راجِع OVERRIDE_MIN_ASPECT_RATIO.
كيفية تحسين التطبيقات
راجِع OVERRIDE_MIN_ASPECT_RATIO.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
راجِع OVERRIDE_MIN_ASPECT_RATIO.
علامات الخصائص لتعديل الإلغاء
راجِع OVERRIDE_MIN_ASPECT_RATIO.
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ANY_ORIENTATION
لتمكين إجراءات التجاوز التالية من تجاوز أي اتجاه:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
اضبط سمة البيان activity:screenOrientation
أو استخدِم واجهة برمجة التطبيقات Activity#setRequestedOrientation()
.
كيفية تحسين التطبيقات
يجب أن يكون تطبيقك متوافقًا مع جميع الاتجاهات. تغيير الاتجاه هو
تغيير في الإعدادات، ويمكن التعامل معه بطريقتَين: السماح للنظام بإزالة التطبيق وإعادة إنشائه أو إدارة تغييرات الإعدادات
بنفسك. إذا كنت تدير تغييرات الإعدادات بنفسك، يمكن الاحتفاظ بحالة التطبيق باستخدام ViewModel
. في حالات محدودة جدًا، يمكنك اختيار قفل
اتجاه العرض على الشاشات الصغيرة فقط، على الرغم من أنّ إجراء ذلك قد لا يكون مناسبًا على نطاق واسع مقارنةً بمحاولة
السماح للمستخدم بإدارة التطبيق حسب الحاجة. في الإصدار 12L من نظام التشغيل Android والإصدارات الأحدث،
يمكن إلغاء الاتجاه الثابت من خلال إعدادات الجهاز. لمزيد من
المعلومات عن التعامل مع تغييرات الضبط وتوفير جميع
اتجاهات العرض، يُرجى الاطّلاع على التعامل مع تغييرات الضبط،
نظرة عامة على ViewModel، واتجاه عرض التطبيق محظور على
الهواتف ولكن ليس على الأجهزة ذات الشاشة الكبيرة.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
على false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
OVERRIDE_ANY_ORIENTATION_TO_USER
يتيح للتطبيق ملء مساحة العرض المتاحة. تلغي أي قيود على الاتجاه
وإمكانية إعادة الحجم ونسبة العرض إلى الارتفاع المحدّدة في بيان التطبيق. ويتم أيضًا تجاهل أي مكالمات إلى Activity#setRequestedOrientation()
.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
لا تضبط سمة البيان
android:screenOrientation
أو تضبط السمة على"user"
.اضبط سمة ملف البيان
android:resizeableActivity
علىtrue
.على الشاشات الصغيرة، لتفعيل ميزة تغيير حجم التطبيق مع إيقاف وضع المتعدّد النوافذ باستخدام
android:resizeableActivity=false
، اضبط علامة البيانات الوصفيةandroid.supports_size_changes
علىtrue
. لا تضبطminAspectRatio
وmaxAspectRatio
.
كيفية تحسين التطبيقات
فعِّل تطبيقك ليتوافق مع جميع الاتجاهات، ولا تضبط screenOrientation
مواصفات في بيان تطبيقك. ويمكنك أيضًا إتاحة إمكانية تغيير حجم التطبيق ووضع النوافذ المتعددة وجميع نِسب العرض إلى الارتفاع من خلال ضبط
سمة android:resizeableActivity
في ملف البيان الخاص بالتطبيق على true
. يُرجى الاطّلاع على مقالة إتاحة أحجام الشاشات المختلفة.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الموقع لتعديل إلغاء الإعدادات
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
ملاحظة: يتم تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
تفعيل الوضع العمودي لجميع الأنشطة في الحزمة ما لم يتم تفعيل OVERRIDE_ANY_ORIENTATION، لا يتم استخدام الإلغاء إلا عندما لا يتم تحديد اتجاه ثابت آخر من خلال النشاط.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الخصائص لتعديل الإلغاء
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
تفعِّل ميزة التوجيه nosensor لجميع الأنشطة في الحزمة. ما لم يكن OVERRIDE_ANY_ORIENTATION مفعّلاً، لا يتم استخدام الإعدادات المُلغاة إلا إذا لم يتم تحديد اتجاه ثابت آخر من قِبل النشاط.
كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الخصائص لتعديل الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
تعمل هذه السياسة على تفعيل الاتجاه الأفقي العكسي لجميع الأنشطة في الحزمة. ما لم يتم تفعيل OVERRIDE_ANY_ORIENTATION، لا يتم استخدام الإلغاء إلا في حال عدم تحديد اتجاه ثابت آخر من خلال النشاط.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية تحسين التطبيقات
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الموقع لتعديل إلغاء الإعدادات
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
تحدّد الإعدادات القصوى OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT، OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR، و OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE لعدم سريان عمليات الاستبدال إلا عندما يكون اتصال الكاميرا نشطًا.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
يُرجى الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الخصائص لتعديل الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
تقييد اتجاه العرض على الاتجاه الأفقي الطبيعي عند استيفاء الشروط التالية:
- النشاط معروض بملء الشاشة
- خاصية مكوِّن الإيقاف
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
غير مفعَّلة - تم تفعيل إعداد تجاهل طلب الاتجاه لدى الشركة المصنّعة للجهاز للشاشة
- الاتجاه الطبيعي للشاشة هو الوضع الأفقي
كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"
غير منطبق. من المفترض أن يتم حلّ المشكلة في منطق التطبيق.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
على false
.
علامات الموقع لتعديل إلغاء الإعدادات
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
تعمل هذه السياسة على تفعيل سياسة التوافق التي تتخطّى تعديل اتجاه التطبيق استجابةً لاستدعاء
التطبيق Activity#setRequestedOrientation()
عند إعادة تشغيل التطبيق
أو عند إجراء معالجة نشطة له في الكاميرا.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
ضبط علامة السمة
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
على true
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
ضبط علامة السمة
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
على false
علامات الموقع لتعديل إلغاء الإعدادات
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
تفعِّل سياسة التوافق التي تتجاهل الاتجاه المطلوب للتطبيق في
استجابةً للتطبيق الذي يطلب
Activity#setRequestedOrientation()
أكثر من مرّتين
في ثانية واحدة إذا لم يكن النشاط مُعدًّا للعرض على شاشة عريضة أفقيًا للاتجاه الثابت.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
غير منطبق. من المفترض أن يتم حلّ المشكلة في منطق التطبيق.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
على
false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
ملاحظة: يتم تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
استبعاد الحِزم من سلوك طلب تجاهل الاتجاه الذي يمكن أن يفعّله مصنعو الأجهزة لمنطقة شاشة أو الشاشة بأكملها
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
غير منطبق. من المفترض أن يتم حلّ المشكلة في منطق التطبيق.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
لا يمكن الإيقاف. قد يكون إيقاف خيار إلغاء الإعدادات خطيرًا إذا كان التطبيق غير متوافق مع جهاز تم تفعيل إعداد تجاهل طلب الاتجاه في الشركة المصنّعة للجهاز. اتصل بعلاقات مطوّري برامج Android لإيقاف الإلغاء.
علامات الموقع لتعديل إلغاء الإعدادات
لا تتوفّر علامات مواقع لهذا الإلغاء.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
NEVER_SANDBOX_DISPLAY_APIS
فرض عدم تطبيق وضع الحماية في Sandbox لواجهات برمجة تطبيقات Display
مطلقًا
لنشاط وضع التوافق مع الحجم أو وضع إطار الصورة المُعدّ للعرض على شاشة عريضة Display
واجهات برمجة التطبيقات
تستمر في توفير حدود مساحة العرض.
كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"
يمكنك الإفصاح عن أنّ الأنشطة قابلة للتغيير من خلال ضبط سمة البيان
android:resizeableActivity
على true
أو علامة البيانات الوصفية android.supports_size_changes
على true
.
كيفية تحسين التطبيقات
يجب ألا تعتمد التطبيقات التي تعلن أنّها قابلة للتغيير بالكامل على حجم الشاشة
لتحديد موضع عناصر واجهة المستخدم. نقل تطبيقك إلى واجهات برمجة تطبيقات حديثة توفّر
"WindowMetrics
" إذا كنت تستخدم Jetpack Compose، يمكنك الاستفادة من واجهة برمجة تطبيقات WindowSizeClass
لرسم واجهة المستخدم استنادًا إلى حجم شاشة التطبيق على الشاشة الحالية. راجِع
استخدام فئات حجم النوافذ.
كيفية إيقاف الإلغاء أو إيقافه
لا يمكن إيقاف هذه الميزة. نقل البيانات من واجهات برمجة التطبيقات المتوقّفة نهائيًا
علامات الخصائص لتعديل الإلغاء
لا تتوفّر علامات مواقع لهذا الإلغاء.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
ملاحظة: يتم تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
ALWAYS_SANDBOX_DISPLAY_APIS
يفرض على الحِزم تطبيق وضع الحماية في واجهة برمجة التطبيقات Display
دائمًا
بغض النظر عن وضع وضع النوافذ. تقدّم واجهات برمجة التطبيقات Display
حدود التطبيق في جميع الأوقات.
كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"
يمكنك تحديد أنّ الأنشطة غير قابلة للتغيير من خلال ضبط سمة
android:resizeableActivity
على false
أو علامة البيانات الوصفية
android.supports_size_changes
على false
.
كيفية تحسين التطبيقات
يجب ألا تعتمد التطبيقات التي تعلن أنّها قابلة للتغيير بالكامل على حجم الشاشة لتحديد موضع عناصر واجهة المستخدم. نقل بيانات تطبيقك من واجهات برمجة التطبيقات المتوقّفة إلى
واجهات برمجة التطبيقات المحدّثة التي توفّر WindowMetrics
يُرجى الاطّلاع على
WindowMetricsCalculator
.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
لا يمكن إيقاف هذه الميزة. نقل البيانات من واجهات برمجة التطبيقات المتوقّفة نهائيًا
علامات الخصائص لتعديل الإلغاء
لا تتوفّر علامات مواقع لهذا الإلغاء.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
يفرض هذا الإعداد في الحِزم وضع حماية لواجهات برمجة تطبيقات View
التالية على حدود النشاط:
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
حل المشكلة في رمز التطبيق باستخدام واجهات برمجة التطبيقات التي توفر حدود نافذة التطبيق والإزاحة بالنسبة إلى نافذة التطبيق بدلاً من حدود عرض الجهاز والإزاحات المتعلقة بعرض الجهاز.
كيفية تحسين التطبيقات
يجب أن تستخدم التطبيقات واجهات برمجة التطبيقات View
، مع مراعاة إمكانية تطبيق وضع "ملء الشاشة"
ووضع "النوافذ المتعددة" على التطبيق. يُرجى الاطّلاع على
WindowMetricsCalculator
.
كيفية إيقاف الإلغاء أو إيقافه
اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
على false
.
علامات الموقع لتعديل إلغاء الإعدادات
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
ملاحظة: لا تؤدي الأوامر إلا إلى تطبيق أو إزالة إلغاء الإعدادات مؤقتًا.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
لإيقاف فرض التدوير. تحسين تجربة المستخدم في بعض التطبيقات
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"
ضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
على false
كيفية تحسين التطبيقات
لا تعتمد على معلومات الجهاز أو معلومات أداة الاستشعار في الكاميرا المخزَّنة مؤقتًا. للحصول على إرشادات حول التوافق مع الكاميرا، يُرجى الاطّلاع على لمحة عن عدسة الكاميرا وإتاحة المساحات التي يمكن تغيير حجمها في تطبيق الكاميرا.
كيفية إيقاف الإلغاء أو إيقافه
اضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
على true
.
علامات الموقع لتعديل إلغاء الإعدادات
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق الإلغاء، الذي يزيل فرض التدوير:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
لإزالة الإعدادات التي تم إلغاؤها، ما يسمح بإجراء عملية الدفع بالتناوب بالقوة:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
لإيقاف إعادة تحميل النشاط بعد فرض التدوير. يتم تحسين تجربة المستخدم عندما تؤدي إعادة التحميل إلى فقدان الحالة في التطبيقات.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
اضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
على false
.
كيفية تحسين التطبيقات
راجع OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
ضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
على true
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
أوامر adb لاختبار الإلغاء
لتطبيق الإلغاء، الذي يزيل إعادة تحميل النشاط:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
لإزالة الإعدادات المُلغاة التي تسمح بإعادة تحميل النشاط:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
تؤدي هذه القيمة إلى إعادة تحميل النشاط في الحِزم التي يتم تطبيقها عليها باستخدام دورة onResume()
→ onPause()
→ onResume()
بدلاً من onResume()
→
onStop()
→ onResume()
بعد فرض دوران التوافق مع الكاميرا.
كيفية تحقيق التطبيقات للنتيجة نفسها التي تحقّقها ميزة "الإلغاء"
ضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
على true
كيفية تحسين التطبيقات
راجِع OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
اضبط علامة السمة
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
على false
.
علامات الموقع لتعديل إلغاء الإعدادات
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
ملاحظة: يتم تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
يفرض اقتصاص إخراج الكاميرا بالاتجاه المعاكس عندما لا يكون اتجاه كاميرا الوضع العمودي ALIGNED مع اتجاه الجهاز الطبيعي. لا تتعامل العديد من التطبيقات مع هذا الموقف وتعرض الصور بشكل ممتد.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
اضبط علامة السمة
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
على true
.
كيفية تحسين التطبيقات
راجع OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
كيفية إيقاف الإلغاء أو إيقافه
اضبط علامة السمة
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
على false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء الذي يطبّق اقتصاص الكاميرا الأمامية الداخلية:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
لإزالة خيار الإلغاء الذي يزيل اقتصاص الكاميرا الأمامية الداخلية:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
لمنع التطبيقات من إيقاف مشاركة شاشة التطبيقات (راجِع عرض الوسائط). يتم تنفيذ هذا الإجراء عندما تسيء التطبيقات استخدام واجهة
createConfigForDefaultDisplay()
API لفرض التصوير بملء الشاشة وتهديد خصوصية المستخدم من خلال عرض محتوى
الإشعارات التي يتم تسجيلها من خلال مشاركة الشاشة بملء الشاشة وليس من خلال
التطبيق، وجميع التطبيقات بغض النظر عن وضع النوافذ.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"
السماح بالسلوك التلقائي لعرض الوسائط (تم تنفيذه في الإصدار 14 من Android، ومستوى واجهة برمجة التطبيقات
34، مع createScreenCaptureIntent()
)،
الذي يتيح للمستخدمين تحديد ما إذا كانوا يريدون مشاركة الشاشة الكاملة أو نافذة تطبيق واحد
بغض النظر عن وضع وضع النوافذ أو يمكنك استدعاء
createScreenCaptureIntent(MediaProjectionConfig)
باستخدام الوسيطة MediaProjectionConfig
التي يتم عرضها من
استدعاء إلى createConfigForUserChoice()
.
كيفية تحسين التطبيقات
السماح للمستخدمين باختيار ما إذا كانوا يريدون مشاركة شاشة الجهاز بالكامل أو نافذة أحد التطبيقات أثناء عرض الوسائط، وهو السلوك التلقائي اعتبارًا من Android 14
اجعل تطبيقك قابلاً للتغيير (resizeableActivity="true"
) ليعمل في وضع "النوافذ المتعددة".
كيفية إيقاف الإلغاء أو إيقافه
وبسبب أهمية خصوصية المستخدم، لا يمكن لتطبيقك إيقاف هذا الإلغاء أو إيقافه.
علامات الموقع لتعديل إلغاء الإعدادات
بلا عُري
أوامر adb لاختبار الإلغاء
لتطبيق الإعدادات الفائقة التي تلغي إيقاف التطبيق لميزة "مشاركة الشاشة الجزئية" (أي تفعيل ميزة "مشاركة الشاشة الجزئية"):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
لإزالة الإعداد الذي يتيح للتطبيق إيقاف مشاركة الشاشة المجزّأة:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
تفعيل إرسال تركيز زائف للتطبيقات غير المُركَّزة في وضع تقسيم الشاشة تنتظر بعض محركات الألعاب الحصول على التركيز قبل رسم محتوى التطبيق، وبالتالي، تساعد ميزة التركيز الزائف التطبيقات في تجنُّب البقاء في وضع الإيقاف عند استئنافها وعدم الحصول على التركيز بعد.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحقّقها ميزة "الإلغاء"
ضبط علامة السمة
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
على
true
كيفية تحسين التطبيقات
يمكنك تجنُّب هذه المشكلة إذا كان تطبيقك يتعامل مع العديد من الاتجاهات وتغييرات الإعدادات بشكل جيد. اجعل تطبيقك شاشة كبيرة جاهزًا من خلال اتّباع إرشادات جودة التطبيقات ذات الشاشة الكبيرة.
إذا كنت تشغّل محرّك لعبة Unity، يجب الترقية إلى الإصدار 2019.4.40 أو إصدار أحدث،
وإعادة تصدير لعبتك. اترك الخيار Resizable Window
محدَّدًا في إعدادات مشغّل Android
.
كيفية إيقاف ميزة "الإلغاء" أو إيقافها
اضبط علامة السمة
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
على
false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
أوامر adb لاختبار إلغاء الإعدادات
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
لإزالة الإعدادات المُلغاة:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
مصادر إضافية
- إرشادات جودة التطبيقات ذات الشاشات الكبيرة
- إرشادات الجودة الأساسية للتطبيق