ينشط Android وضع التوافق للتطبيقات التي توضح القيود المتعلقة بالاتجاه أو إمكانية إعادة الضبط. ويضمن وضع التوافق سلوكًا مقبولاً للتطبيق على الأجهزة ذات الشاشات الكبيرة والهواتف القابلة للطيّ، ولكن بسهولة الاستخدام دون المستوى المطلوب.
تتيح عمليات الإلغاء حسب التطبيقات للشركات المصنّعة للأجهزة تغيير سلوك التطبيقات لتحسين تجربة المستخدم أو منع التطبيقات من اختراق أجهزة معيَّنة.
الأجهزة المرجعية
قد تتطلّب الأجهزة التالية عمليات إلغاء لكل تطبيق بسبب عمليات ضبط أو إعدادات غير معتادة لا تتوافق مع التطبيقات:
- الأجهزة اللوحية: يكون الاتجاه الطبيعي لبعض الأجهزة اللوحية، مثل Pixel Tablet،
الوضع الأفقي. يكون الجهاز في اتجاهه الطبيعي عند عرض
Display#getRotation()
علىSurface.ROTATION_0
. إذا افترضت التطبيقات أنّROTATION_0
هو الوضع العمودي، قد لا تتطابق تنسيقات التطبيقات ومعاينة الكاميرا مع شاشة الجهاز. - الهواتف القابلة للطيّ الأفقية: تكون بعض الأجهزة القابلة للطيّ، مثل Pixel Fold، في الاتجاه العمودي عند طيّها، ولكنّها تكون باتجاه أفقي عند طيّها. إذا افترضت التطبيقات أن الاتجاه غير المطوي يكون في الوضع العمودي، من المحتمل أن تكون حلقات الوميض أو مشاكل في التنسيق.
- الهواتف القابلة للطيّ: عادةً ما تكون الهواتف غير المطوية في الاتجاه العمودي. ولكن عند طي الهاتف، يتم عادةً عرض شاشة صغيرة في الاتجاه الأفقي. ويجب أن تحدد التطبيقات الاتجاهات المختلفة لشاشات العرض وتستوعبها.
مشاكل التوافق الشائعة
تحدث مشاكل التوافق في التطبيقات غالبًا بسبب القيود المفروضة على اتجاه التطبيق، والقيود المفروضة على إمكانية إعادة الضبط، ونسبة العرض إلى الارتفاع، والمعالجة الخاطئة لاتجاه معاينة الكاميرا، وإساءة استخدام واجهات برمجة التطبيقات.
ليتيربوكسينغ
يضع تطبيق Letterboxing التطبيق في وسط الشاشة أو على الشاشات الكبيرة أو على جانب واحد أو الآخر لتسهيل الوصول إليه. تملأ درجات اللون (الأشرطة ذات الألوان الخالصة أو الخلفية المموّهة) منطقة العرض غير المستخدمة على طول الجوانب أو الجزء العلوي والسفلي من التطبيق.
غالبًا ما تحدث ميزة Letterbox على الأجهزة ذات الشاشات الكبيرة لأن الأبعاد ونسبة العرض إلى الارتفاع لشاشة الجهاز عادةً ما تكون مختلفة عن أبعاد الهواتف العادية التي صُممت معظم التطبيقات من أجلها.
المشكلة
لا يتوافق التطبيق مع جميع إعدادات العرض لأنّ التطبيق له اتجاه ثابت أو نسبة عرض إلى ارتفاع ثابتة أو لا يمكن تغيير حجمه.
تشمل إعدادات الضبط التي تتحكّم في اتجاه التطبيق وإمكانية تغيير حجمه ما يلي:
screenOrientation
: تحدِّد هذه السياسة اتجاهًا ثابتًا للتطبيق. يمكن للتطبيقات أيضًا ضبط الاتجاه في وقت التشغيل باستخدامActivity#setRequestedOrientation()
.resizeableActivity
: يشير إلى ما إذا كان بإمكان النظام تغيير حجم التطبيقات لتناسب النوافذ ذات الأبعاد المختلفة. في نظام التشغيل Android 11 (المستوى 30 لواجهة برمجة التطبيقات) والإصدارات الأقدم، يحدِّد هذا الإعداد ما إذا كانت التطبيقات تتيح وضع النوافذ المتعددة. في نظام التشغيل Android 12 (المستوى 31 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يتم تحديد ما إذا كانت التطبيقات تتيح وضع النوافذ المتعددة على الشاشات الصغيرة (sw < 600dp). في نظام التشغيل Android 12 والإصدارات الأحدث، تتوافق التطبيقات مع وضع النوافذ المتعددة على الشاشات الكبيرة (sw >= 600dp) بغض النظر عن هذا الإعداد.maxAspectRatio
: تُستخدَم لتحديد الحدّ الأقصى لنسبة العرض إلى الارتفاع التي يتيحها التطبيق. ولا يمكن ضبطmaxAspectRatio
إلا للتطبيقات التي تم ضبطresizeableActivity
علىfalse
لها.minAspectRatio
: تحدِّد هذه السياسة الحدّ الأدنى لنسبة العرض إلى الارتفاع التي يتيحها التطبيق. ولا يمكن ضبطminAspectRatio
إلا للتطبيقات التي تم ضبطresizeableActivity
علىfalse
لها.
التحسين
يجب أن يتيح التطبيق استخدام جميع اتّجاهات وأحجام عرض الجهاز ووضع النوافذ المتعددة. يجب إزالة جميع قيود الاتجاه ونسبة العرض إلى الارتفاع الثابتة من تنسيقات التطبيق وملف بيان التطبيق.
حل بديل التوافق
إذا كان أحد التطبيقات التي لها اتجاه ثابت أو نسبة عرض إلى ارتفاع ثابتة يتم تشغيله في نافذة لا يتيح فيها التطبيق عرض حجم النافذة أو اتجاهها بشكل مباشر، يضبط نظام 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 على أن مستشعر صور الكاميرا "يجب أن يكون موجهًا بحيث يتوافق البُعد الطويل للكاميرا مع البُعد الطويل للشاشة".
وغالبًا ما تفترض التطبيقات أن اتجاه الجهاز واتجاه أداة استشعار الكاميرا الوضع العمودي، وهذا افتراض معقول على الهواتف الجوّالة العادية. لكن الاتجاه الطبيعي للأجهزة اللوحية وأجهزة الكمبيوتر المحمولة وأجهزة استشعار الكاميرا يمكن أن يكون أفقيًا. بالإضافة إلى ذلك، يمكن أن يكون لأشكال الأجهزة الجديدة، مثل الهواتف القابلة للطيّ، اتجاهات طبيعية متعددة وأدوات استشعار متعددة في اتّجاهات مختلفة.
عند بدء نشاط ما باتجاه الكاميرا، لا يتوقع التطبيق أو التبديل بين كاميرات أو شاشات مختلفة في الجهاز (بالنسبة إلى الهواتف القابلة للطي) معاينة الكاميرا بشكل غير محاذٍ أو مشوّه.
التحسين
يجب أن تحدّد تطبيقات الكاميرا اتجاه الجهاز واتجاه أداة استشعار الكاميرا وإدارةهما بشكل صحيح لتقديم معاينة كاميرا تمت محاذاتها وتعديلها بشكل صحيح. ويجب أن تحتسب التطبيقات دوران الجهاز ودوران أداة الاستشعار ونسبة العرض إلى الارتفاع للشاشة أو النافذة، ثم تُطبّق النتائج على معاينة الكاميرا. للحصول على إرشادات مفصَّلة، يمكنك الاطّلاع على معاينة الكاميرا ولمحة عن عدسة الكاميرا.
حل بديل التوافق
يكون الجهاز في الاتجاه الطبيعي عند عرض Display#getRotation()
Surface.ROTATION_0
. يحتسب النظام قيمة
CameraCharacteristics.SENSOR_ORIENTATION
من الاتجاه الطبيعي للجهاز. ويعمل Android على محاذاة النافذة العمودية
للتطبيقات ذات الوضع العمودي مع الاتجاه الطبيعي للجهاز، وهو ما تتوقعه معظم التطبيقات. يقتصّ Android أيضًا صورة أداة الاستشعار في الكاميرا عندما يكون
اتجاه أداة الاستشعار أفقيًا وتكون معاينة الكاميرا رأسية. تتضمن الحلول البديلة
المحددة ما يلي:
فرض تدوير معاينات الكاميرا للتطبيقات المحظورة على وضع "بورتريه": تتوقّع التطبيقات الحصرية بالاتجاه العمودي أن يكون الاتجاه الطبيعي للجهاز واتجاه أداة استشعار الكاميرا في الوضع العمودي. ومع ذلك، في نظام التشغيل Android 12 (مستوى واجهة برمجة التطبيقات 31) والإصدارات الأحدث، يمكن تشغيل التطبيقات في اتّجاهات متعدّدة للأجهزة إذا تجاهلت الشركات المصنّعة للأجهزة مواصفات الاتجاهات.
عند ربط تطبيق مشروط بإجراء "بورتريه" بالكاميرا، يفرض نظام Android تدوير التطبيق لمحاذاة نافذة الوضع "بورتريه" مع الاتجاه الطبيعي للجهاز.
في بعض الأجهزة اللوحية (راجع الأجهزة المرجعية)، يتم تدوير نافذة الوضع العمودي للتطبيق إلى الوضع العمودي بملء الشاشة للتوافق مع الاتجاه الطبيعي للجهاز. يشغل التطبيق الشاشة بأكملها بعد فرض التدوير.
على الشاشة الداخلية الأفقية للأجهزة القابلة للطي (راجِع الأجهزة المرجعية)، يتم تدوير الأنشطة في الوضع العمودي فقط إلى الوضع الأفقي لتتماشى مع الاتجاه الطبيعي غير المطوي. يظهر التطبيق في شكل مائل بعد فرض الدوران.
اقتصاص الكاميرا الأمامية الداخلية: تكون أداة الاستشعار في الكاميرا الأمامية الداخلية في بعض الأجهزة القابلة للطيّ في الاتجاه الأفقي. فضلاً عن فرض تدوير معاينة الكاميرا على الشاشة الداخلية القابلة للطي، يقتصّ Android مجال رؤية الكاميرا الأمامية (الأفقية) بحيث تلتقط أداة الاستشعار مشهدًا عكسيًا.
فرض إعادة تحميل معاينات الكاميرا: يتنقل النظام بين طريقتَي النشاط
onStop()
وonStart()
(تلقائيًا) أوonPause()
وonResume()
(يتم تطبيق ذلك من خلال OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE لكل تطبيق) بعد فرض التدوير للتأكّد من عرض معاينة الكاميرا بشكل صحيح.ضبط نسبة العرض إلى الارتفاع: يغيّر النظام بشكل ديناميكي نسبة العرض إلى الارتفاع لفرض تدوير الكاميرا في معاينة الصورة إلى حد أدنى أعلى لنسبة العرض إلى الارتفاع، ما يضمن تغيير حجم معاينة الكاميرا بشكل صحيح.
يمكن لمطوّري التطبيقات إلغاء هذه الحلول البديلة إذا كانت التطبيقات تتعامل مع معاينة الكاميرا بشكل صحيح. راجِع عمليات الإلغاء حسب التطبيق.
واجهات برمجة التطبيقات التي يشيع استخدامها
أتاح Android ميزات مثل وضع النوافذ المتعددة والأجهزة مثل الأجهزة القابلة للطيّ، ولذلك تم إيقاف واجهات برمجة التطبيقات القديمة واستبدالها بواجهات برمجة تطبيقات محدَّثة تتوافق مع جميع أحجام الشاشات وأشكال الأجهزة. ومع ذلك، لا تزال واجهات برمجة التطبيقات المتوقّفة نهائيًا متاحة للتوافق مع الأنظمة القديمة.
تم تصميم بعض واجهات برمجة تطبيقات View
لأغراض خاصة لا يفهمها المطوّرون دائمًا.
المشكلة
يواصل المطوّرون استخدام واجهات برمجة تطبيقات Display
المتوقّفة نهائيًا، ويفترضون بشكل غير صحيح أنّ
واجهات برمجة التطبيقات تعرض حدود التطبيق بدلاً من حدود منطقة عرض الجهاز. أو يستخدم المطورون عن طريق الخطأ واجهات برمجة التطبيقات
لعرض غرض خاص للحصول على مقاييس العرض العامة.
والنتيجة هي الحسابات الخاطئة عند إعادة ضبط موضع عناصر واجهة المستخدم بعد تغيير حجم نافذة
التطبيق، ما يتسبب في مشاكل في التنسيق.
واجهات برمجة تطبيقات الشبكة الإعلانية التي يتم إيقافها نهائيًا وإساءة استخدامها:
لمزيد من المعلومات، يُرجى الاطّلاع على إتاحة النوافذ المتعددة.
واجهات برمجة تطبيقات العرض الذي يسيء استخدامها:
التحسين
لا تعتمد أبدًا على حجم العرض المادي لتحديد موضع عناصر واجهة المستخدم. يمكنك نقل تطبيقك إلى واجهات برمجة التطبيقات استنادًا إلى WindowMetrics
، بما في ذلك واجهات برمجة تطبيقات WindowManager
التالية:
النظام الأساسي:
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 على نظام 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>
يسرد الجدول التالي عمليات الإلغاء المتاحة بالإضافة إلى إرشادات حول كيفية تحسين تطبيقك حتى لا يحتاج إلى الاعتماد على عمليات الإلغاء. يمكنك إضافة علامات الخاصية إلى بيان التطبيق لإيقاف بعض عمليات الإلغاء.
عمليات الإلغاء حسب التطبيق | |||
---|---|---|---|
Type | الاسم | رقم التعريف | الوصف |
إمكانية إعادة التعديل | FORCE_RELENGTH_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.supports_size_changes
على true
لإتاحة تغيير الحجم أثناء إيقاف وضع النوافذ المتعددة باستخدام android:resizeableActivity=false
.
كيفية تحسين التطبيقات
استخدِم التصاميم المتجاوبة/التكيّفية لتمكين التطبيقات من التكيّف مع جميع أحجام العرض ونِسب العرض إلى الارتفاع. يُرجى الاطّلاع على مقالة إتاحة أحجام الشاشات المختلفة.
كيفية إيقاف الإلغاء أو إيقافه
اضبط علامة السمة PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
على
false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
أوامر adb لاختبار الإلغاء
لتطبيق الإلغاء وتغيير حجم التطبيق، اتّبِع الخطوات التالية:
adb shell am compat enable FORCE_RESIZE_APP <package>
لإزالة الإلغاء:
adb shell am compat disable FORCE_RESIZE_APP <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
FORCE_NON_REING_APP
تفرض عدم تغيير حجم الحِزم التي يتم تطبيق الإلغاء عليها وإدخال وضع توافق الحجم عند تغييرات الضبط.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
اضبط السمة android:resizeableActivity
وعلامة android.supports_size_changes
للبيانات الوصفية على false
في بيان التطبيق، وأعلِن إما عن تقييد الاتجاه أو نسبة العرض إلى الارتفاع.
كيفية تحسين التطبيقات
إذا تم تغيير حجم التطبيقات، يجب ضبط "android:resizeableActivity
" أو "android.supports_size_changes
" على true
.
يجب تحسين التطبيقات الأخرى لتعمل بشكل جيد عند تغيير حجمها. راجِع android:resizeableActivity.
كيفية إيقاف الإلغاء أو إيقافه
اضبط علامة السمة PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
على
false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
أوامر adb لاختبار الإلغاء
لتطبيق الإلغاء وجعل التطبيق لا يمكن تغيير حجمه:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
لإزالة الإلغاء:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_MIN_ASPECT_RATIO
يراقب جميع عمليات الإلغاء التي تفرض حدًا أدنى معيّنًا لنسبة العرض إلى الارتفاع.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
يمكنك ضبط السمة android:minAspectRatio
على مستوى النشاط أو التطبيق.
كيفية تحسين التطبيقات
لا تضبط أي قيود على نسبة العرض إلى الارتفاع في تطبيقك، بل تأكَّد من أنّ تطبيقك يتيح
أحجام الشاشات المختلفة. استخدم فئات حجم النافذة لدعم التخطيطات المختلفة بناءً على مقدار المساحة التي يتمتع بها تطبيقك على الشاشة. يمكنك الاطّلاع على Compose WindowSizeClass
API
و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
. وفي حالات محدودة جدًا، يمكنك اختيار تثبيت الاتجاه على الشاشات الصغيرة فقط، على الرغم من أن ذلك قد لا يؤدي إلى تغيير حجمه وقد يسمح للمستخدم بتدوير التطبيق حسب الحاجة. في إصدارات Android 12L والإصدارات الأحدث،
يمكن إلغاء الاتجاه الثابت من خلال إعداد الجهاز. لمزيد من المعلومات حول التعامل مع تغييرات الإعدادات وإتاحة جميع الاتجاهات، يمكنك الاطّلاع على التغييرات على إعدادات الاسم المعرِّف ونظرة عامة على ViewModel وحصر اتجاه التطبيق على الهواتف وليس على الأجهزة ذات الشاشات الكبيرة.
كيفية إيقاف الإلغاء أو إيقافه
اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
على false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ANY_ORIENTATION_TO_USER
لتفعيل التطبيق من ملء مساحة العرض المتاحة. يتجاوز أي قيود متعلقة بالاتجاه وإمكانية تغيير
نسبة العرض إلى الارتفاع المحددة في بيان التطبيق. وهو يتجاهل أيضًا أي مكالمات إلى Activity#setRequestedOrientation()
.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
لا تضبط سمة البيان
android:screenOrientation
أو تضبط السمة على"user"
.اضبط سمة البيان
android:resizeableActivity
علىtrue
.على الشاشات الصغيرة، يمكنك ضبط علامة البيانات الوصفية
android.supports_size_changes
علىtrue
لإتاحة تغيير حجم التطبيق مع إيقاف وضع النوافذ المتعددة باستخدامandroid:resizeableActivity=false
. يجب عدم ضبطminAspectRatio
وmaxAspectRatio
.
كيفية تحسين التطبيقات
فعِّل توافق تطبيقك مع جميع الاتجاهات، ولا تضبط مواصفات screenOrientation
في بيان التطبيق. ويمكنك أيضًا إتاحة إمكانية تغيير حجم التطبيق ووضع النوافذ المتعددة وجميع نِسب العرض إلى الارتفاع من خلال ضبط
سمة android:resizeableActivity
في ملف البيان الخاص بالتطبيق على true
. يُرجى الاطّلاع على مقالة إتاحة أحجام الشاشات المختلفة.
كيفية إيقاف الإلغاء أو إيقافه
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الخصائص لتعديل الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
تعمل هذه السياسة على تفعيل الاتجاه العمودي لجميع الأنشطة في الحزمة. ما لم يتم تفعيل OVERRIDE_ANY_ORIENTATION، لا يتم استخدام الإلغاء إلا عندما لا يتم تحديد اتجاه ثابت آخر من خلال النشاط.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الخصائص لتعديل الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
لتفعيل اتجاه جهاز الاستشعار لجميع الأنشطة في الحزمة. ما لم يتم تفعيل OVERRIDE_ANY_ORIENTATION، لا يتم استخدام الإلغاء إلا عندما لا يتم تحديد اتجاه ثابت آخر من خلال النشاط.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الخصائص لتعديل الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
لتفعيل الاتجاه العكسي العكسي لجميع الأنشطة في الحزمة. ما لم يتم تفعيل OVERRIDE_ANY_ORIENTATION، لا يتم استخدام الإلغاء إلا عندما لا يتم تحديد اتجاه ثابت آخر من خلال النشاط.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الخصائص لتعديل الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
يتم إلغاء الحدود OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT وOVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR و OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE لن يتم تطبيقها إلا عندما يكون الاتصال بالكاميرا نشطًا.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
علامات الخصائص لتعديل الإلغاء
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
لتقييد اتجاه العرض على الاتجاه الطبيعي الأفقي عند استيفاء الشروط التالية:
- النشاط في وضع ملء الشاشة
- خاصية مكوِّن الإيقاف
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
غير مفعَّلة - تم تفعيل إعداد طلب تجاهل الاتجاه المصنِّع للجهاز على الشاشة
- الاتجاه الطبيعي للشاشة هو الوضع الأفقي
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
غير منطبق. يجب حل المشكلة في منطق التطبيق.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
اضبط علامة السمة
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
على false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
تعمل هذه السياسة على تفعيل سياسة التوافق التي تتخطّى تعديل اتجاه التطبيق استجابةً لاستدعاء
التطبيق Activity#setRequestedOrientation()
عند إعادة تشغيل التطبيق
أو عند إجراء معالجة نشطة له في الكاميرا.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
ضبط علامة السمة
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
على true
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
ضبط علامة السمة
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
على false
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
تعمل هذه السياسة على تفعيل سياسة التوافق التي تتجاهل الاتجاه المطلوب للتطبيق استجابةً
لاستدعاء التطبيق
Activity#setRequestedOrientation()
أكثر من مرتين
في ثانية واحدة إذا لم يكن النشاط مُعدًّا للعرض على شاشة عريضة أفقيًا باتجاه ثابت.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
غير منطبق. يجب حل المشكلة في منطق التطبيق.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
ضبط علامة السمة
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
على
false
.
علامات الخصائص لتعديل الإلغاء
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
لاستبعاد الحِزم من سلوك تجاهل طلب الاتجاه الذي يمكن للشركات المصنّعة للأجهزة تفعيله لمنطقة العرض أو الشاشة بالكامل.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
غير منطبق. يجب حل المشكلة في منطق التطبيق.
كيفية تحسين التطبيقات
يمكنك الاطّلاع على OVERRIDE_ANY_ORIENTATION
.
كيفية إيقاف الإلغاء أو إيقافه
لا يمكن الإيقاف. قد يكون إيقاف الإلغاء أمرًا خطيرًا إذا كان التطبيق غير متوافق مع جهاز تم فيه تفعيل إعداد تجاهل طلب الاتجاه من الشركة المصنّعة للجهاز. اتصل بعلاقات مطوّري برامج Android لإيقاف الإلغاء.
علامات الخصائص لتعديل الإلغاء
ما مِن علامات خصائص لهذا الإلغاء.
أوامر adb لاختبار الإلغاء
لتطبيق خيار الإلغاء:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
لإزالة الإلغاء:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
NEVER_SANDBOX_DISPLAY_APIS
لفرض عدم تطبيق وضع الحماية لواجهة برمجة التطبيقات Display
على الحِزم أبدًا على نشاط وضع التوافق مع واجهة برمجة التطبيقات بتنسيق 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_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()
API لفرض التصوير بملء الشاشة وتهديد خصوصية المستخدم من خلال عرض محتوى
الإشعارات التي يتم تسجيلها من خلال مشاركة الشاشة بملء الشاشة وليس من خلال
التطبيق، وجميع التطبيقات بغض النظر عن وضع النوافذ.
كيف يمكن للتطبيقات تحقيق النتيجة نفسها التي تحققها عند الإلغاء
تسمح هذه السياسة بالسلوك التلقائي لعرض الوسائط (يتم تنفيذه في نظام التشغيل 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>
ملاحظة: يتمّ تطبيق الأوامر بشكل مؤقت فقط أو إزالتها.
مصادر إضافية
- إرشادات جودة التطبيقات ذات الشاشات الكبيرة
- إرشادات جودة التطبيقات الأساسية