Android یک حالت سازگاری را برای برنامههایی فعال میکند که جهتگیری یا محدودیتهای تغییر اندازه را اعلام میکنند. حالت سازگاری عملکرد قابل قبول برنامه را در دستگاههای صفحه بزرگ و تلفنهای تاشو اما با قابلیت استفاده کمتر از حد مطلوب تضمین میکند.
لغو هر برنامه به سازندگان دستگاه امکان می دهد تا رفتار برنامه را تغییر دهند تا تجربه کاربر را بهبود بخشند یا از خراب شدن برنامه ها در دستگاه های خاص جلوگیری کنند.
دستگاه های مرجع
دستگاههای زیر ممکن است به دلیل پیکربندیهای غیرمعمول یا پیکربندیهایی که بهخوبی توسط برنامهها پشتیبانی نمیشوند، نیاز به لغو هر برنامه داشته باشند:
- تبلت ها: جهت گیری طبیعی برخی تبلت ها مانند تبلت پیکسل، منظره است. هنگامی که
Display#getRotation()
Surface.ROTATION_0
برمی گرداند، یک دستگاه در جهت طبیعی خود قرار دارد. اگر برنامهها فرض کنندROTATION_0
عمودی است، طرحبندی برنامه و پیشنمایش دوربین ممکن است با نمایشگر دستگاه مطابقت نداشته باشد. - تاشوهای افقی: برخی از دستگاههای تاشو، مانند Pixel Fold، در حالت تاشو حالت عمودی دارند، اما زمانی که باز میشوند، جهت افقی دارند. اگر برنامهها فرض کنند جهت بازشده عمودی است، حلقههای سوسو زدن یا مشکلات طرحبندی محتمل است.
- تلفنهای تاشو تاشو: تلفنهای تاشو معمولاً در جهت عمودی هستند. اما، زمانی که گوشی ها تا شوند، معمولاً صفحه نمایش کوچکی در جهت افقی دارند. برنامهها باید جهتهای مختلف نمایشگرها را شناسایی کرده و مطابقت دهند.
مشکلات رایج سازگاری
برنامهها اغلب به دلیل محدودیتهای جهتگیری برنامه، محدودیتهای اندازه و نسبت ابعاد، مدیریت نادرست جهتگیری پیشنمایش دوربین و استفاده نادرست از APIها، مشکلات سازگاری را تجربه میکنند.
نامه نگاری
Letterboxing برنامه را در مرکز صفحه یا در صفحه های بزرگ در یک طرف یا طرف دیگر برای دسترسی راحت قرار می دهد. مات ها (نوارهای تک رنگ یا کاغذدیواری تار) ناحیه نمایش استفاده نشده را در امتداد طرفین یا بالا و پایین برنامه پر می کنند.
Letterboxing اغلب در دستگاههای صفحهنمایش بزرگ اتفاق میافتد، زیرا ابعاد و نسبت ابعاد نمایشگر دستگاه معمولاً متفاوت از تلفنهای استاندارد است که بیشتر برنامهها برای آن طراحی شدهاند.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing.png?authuser=4&hl=fa)
شکل 1. برنامه محدود به جهت عمودی روی تبلت منظره بسته بندی شده و قابل تاشو است.
موضوع
برنامه از همه پیکربندیهای نمایشگر پشتیبانی نمیکند، زیرا برنامه دارای جهتگیری ثابت، نسبت تصویر ثابت است یا قابل تغییر اندازه نیست.
تنظیمات پیکربندی که جهت گیری برنامه و قابلیت تغییر اندازه را کنترل می کند شامل موارد زیر است:
screenOrientation
: یک جهت ثابت برای یک برنامه مشخص می کند. برنامهها همچنین میتوانند جهتگیری را در زمان اجرا با استفاده ازActivity#setRequestedOrientation()
تنظیم کنند.resizeableActivity
: نشان می دهد که آیا سیستم می تواند اندازه برنامه ها را متناسب با پنجره هایی با ابعاد مختلف تغییر دهد. در Android 11 (سطح API 30) و پایینتر، مشخص میکند که آیا برنامهها از حالت چند پنجرهای پشتیبانی میکنند یا خیر. در Android 12 (سطح API 31) و بالاتر، مشخص میکند که آیا برنامهها از حالت چند پنجرهای در صفحههای کوچک پشتیبانی میکنند ( کلاس اندازه پنجره جمعوجور). در Android 12 و بالاتر، برنامهها بدون توجه به این تنظیم، از حالت چند پنجرهای در صفحههای بزرگ (کلاس اندازه پنجره متوسط یا بزرگ) پشتیبانی میکنند.maxAspectRatio
: حداکثر نسبت تصویر پشتیبانی شده توسط برنامه را مشخص می کند. فقط برنامههایی کهresizeableActivity
رویfalse
تنظیم شده است میتوانندmaxAspectRatio
را تنظیم کنند.minAspectRatio
: حداقل نسبت تصویر پشتیبانی شده توسط برنامه را مشخص می کند. فقط برنامههایی کهresizeableActivity
رویfalse
تنظیم شده است میتوانندminAspectRatio
را تنظیم کنند.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing_issue.png?authuser=4&hl=fa)
برنامه محدود به جهت عمودی است که در دستگاه افقی قابل استفاده نیست.
بهینه سازی
برنامه باید از همه جهتها و اندازههای نمایشگر حالت چند پنجرهای و دستگاه پشتیبانی کند. تمام محدودیتهای جهتگیری و نسبت تصویر ثابت را از طرحبندی برنامه و فایل مانیفست برنامه خود حذف کنید.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/letterboxing_optimization.png?authuser=4&hl=fa)
برنامه از تمام جهت گیری های دستگاه پشتیبانی می کند.
راه حل سازگاری
اگر برنامهای با جهت ثابت یا نسبت تصویر ثابت در پنجرهای اجرا میشود که برنامه مستقیماً از اندازه یا جهت پنجره پشتیبانی نمیکند، Android برای حفظ تداوم، برنامه را جعبه نامه میکند.
با شروع Android 12 (سطح API 31) و ادامه با 12L (سطح API 32)، این پلتفرم پیشرفتهای مختلفی را برای برنامههای جعبه نامه اعمال میکند. سازندگان دستگاه پیشرفتهای UI را پیادهسازی میکنند. برای بهره مندی از بهبودها، نیازی به توسعه اضافی ندارید.
اندروید 12 (سطح API 31) پیشرفت های زیبایی شناسی زیر را معرفی می کند که می توانند توسط سازندگان دستگاه پیکربندی شوند:
- گوشههای گرد: گوشههای پنجره برنامه ظاهر ظریفتری دارند.
- شفافیت نوار سیستم: نوارهای وضعیت و ناوبری، که روی برنامه قرار می گیرند، نیمه شفاف هستند و باعث می شوند نمادهای روی نوارها همیشه در پس زمینه صندوق نامه قابل مشاهده باشند.
- نسبت تصویر قابل تنظیم: نسبت تصویر برنامه را می توان برای بهبود ظاهر برنامه تنظیم کرد.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/enhanced_letterboxing.png?authuser=4&hl=fa)
شکل 2. برنامه Letterboxed با پیشرفت های رابط کاربری.
12L (سطح API 32) بهبودهای عملکردی زیر را اضافه می کند:
موقعیت یابی قابل تنظیم: در صفحه نمایش های بزرگ، سازندگان دستگاه می توانند برنامه را در سمت چپ یا راست نمایشگر قرار دهند و تعامل را آسان تر کنند.
طراحی مجدد دکمه راه اندازی مجدد: سازندگان دستگاه می توانند به دکمه راه اندازی مجدد برای حالت سازگاری با اندازه ظاهر جدیدی برای تشخیص بهتر توسط کاربران بدهند.
Android 13 (سطح API 33) یک گفتگوی آموزش کاربر درباره قرار دادن برنامه جعبه نامه روی صفحه یا قرار دادن صندوق نامه در حالت تقسیم صفحه اضافه می کند:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/enhanced_letterboxing_user_dialog.png?authuser=4&hl=fa)
شکل 3. برنامه جعبه نامه با محاوره آموزش کاربر.
حالت سازگاری با اندازه
حالت سازگاری اندازه، جعبه نامه است که شامل کنترل راه اندازی مجدد است. این کنترل به کاربران امکان می دهد تا برنامه را مجدداً راه اندازی کنند و نمایشگر را دوباره ترسیم کنند. Android حالت سازگاری اندازه را برای برنامههایی که غیرقابل تغییر اندازه تشخیص داده میشوند فراخوانی میکند. هنگامی که یک فعالیت به محفظه نمایشگر ناسازگار با ابعاد فعالیت منتقل میشود، سیستم ممکن است برنامه را تغییر دهد تا نمایشگر دستگاه را حداقل در یک بعد پر کند.
تغییرات پیکربندی دستگاه که می تواند حالت سازگاری اندازه را فعال کند شامل موارد زیر است:
- چرخش دستگاه
- تاشو یا باز شدن دستگاه تاشو
- بین حالت نمایش تمام صفحه و تقسیم صفحه تغییر دهید
موضوع
حالت سازگاری اندازه معمولاً برای فعالیتهایی اعمال میشود که از نظر جهت یا نسبت ابعاد محدود شدهاند و پیکربندی شدهاند (یا توسط سیستم تعیین میشوند) تا غیرقابل تغییر اندازه باشند.
اگر برنامه شما هر یک از معیارهای زیر را داشته باشد قابل تغییر اندازه در نظر گرفته می شود - و در حالت سازگاری با اندازه قرار نمی گیرد:
- قابل تغییر اندازه با
resizeableActivity="true"
- از حالت تصویر در تصویر (PIP) پشتیبانی می کند
- تعبیه شده است
- آیا لغو
FORCE_RESIZE_APP
برای هر برنامه توسط سازنده دستگاه اعمال شده است (خواص تنظیم شده توسط برنامه نادیده گرفته می شود)
اگر برنامه شما هیچ یک از شرایط را نداشته باشد ، قابل تغییر در اندازه نیست و می تواند در حالت سازگاری با اندازه قرار گیرد.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_issue.gif?authuser=4&hl=fa)
برنامه غیرقابل تغییر اندازه در حالت چند پنجره ای خراب می شود.
بهینه سازی
برنامه باید از همه اندازه های نمایش پشتیبانی کند. با تنظیم ویژگی android:resizeableActivity
عنصر <activity>
یا <application>
در مانیفست برنامه، اندازه برنامه خود را true
تغییر اندازه کنید. طرحبندیهای واکنشگرا/تطبیقی برای برنامه خود طراحی کنید. برای اطلاعات بیشتر، به پشتیبانی از اندازه های مختلف صفحه نمایش و پشتیبانی از حالت چند پنجره ای مراجعه کنید.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_optimization.gif?authuser=4&hl=fa)
برنامه در تمام اندازه های پنجره کار می کند.
راه حل سازگاری
اندروید یک برنامه را در حالت سازگاری با اندازه قرار میدهد وقتی سیستم تعیین میکند که نمایش برنامه جعبه نامه را میتوان با تغییر مقیاس برنامه بهبود داد تا پنجره نمایش حداقل در یک بعد پر شود. سیستم یک کنترل راه اندازی مجدد را نمایش می دهد که فرآیند برنامه را دوباره ایجاد می کند، فعالیت را دوباره ایجاد می کند و نمایشگر را دوباره ترسیم می کند. همچنین به بررسی اجمالی فرآیندها و موضوعات مراجعه کنید.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/size_compatibility_mode_workaround.gif?authuser=4&hl=fa)
برنامه فقط پرتره با جعبه نامه در جهت افقی، با کنترل راه اندازی مجدد مقیاس شده است.
حلقه های سوسو
هنگامی که برنامهای از همه جهتهای نمایشگر پشتیبانی نمیکند، ممکن است به طور مکرر جهتگیریهای جدید را در صورت ایجاد تغییر پیکربندی درخواست کند و یک حلقه بینهایت ایجاد کند که باعث میشود صفحه نمایش سوسو بزند یا برنامه بیپایان بچرخد.
موضوع
در Android 12 (سطح API 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)
را فراخوانی کند و حلقه بی نهایت را ادامه دهد.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/flickering_loops_issue.gif?authuser=4&hl=fa)
برنامه فقط افقی روی صفحه نمایش عمودی تماس های مکرری با Activity#setRequestedOrientation()
برقرار می کند.
بهینه سازی
برنامه ها نباید کارهای زیر را انجام دهند:
- جهت گیری پیش فرض را با
Activity#setRequestedOrientation()
در متد ActivityonCreate()
تنظیم کنید زیرا درخواست جهت گیری می تواند به طور غیرمنتظره ای با تغییرات پیکربندی کنترل نشده راه اندازی شود. - فرض کنید جهت طبیعی دستگاه (
ROTATION_0
) عمودی است - جهتگیری را بر اساس سیگنالهایی تنظیم کنید که به اندازه پنجره فعلی مرتبط نیستند، مانند
Display#getRotation()
، وجود یکFoldingFeature
یا APIهای منسوخ شده .
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/flickering_loops_optimization.gif?authuser=4&hl=fa)
برنامه تغییر پیکربندی را کنترل می کند، محدودیت جهت گیری ندارد، بنابراین وارد یک حلقه سوسو نمی شود.
راه حل سازگاری
Android تماسهای Activity#setRequestedOrientation()
را در شرایط زیر نادیده میگیرد:
فعالیت قبلاً از فراخوانی قبلی به روش راه اندازی مجدد شده است یا درمان چرخش نیروی سازگار با دوربین فعال شده است ( پیش نمایش دوربین را در زیر ببینید).
سازندگان دستگاه میتوانند این رفتار را در برنامهای با
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
اعمال کنند.این اکتیویتی بیش از دو درخواست جهت یابی را در یک ثانیه انجام داد که نشان می دهد یک حلقه رخ داده است. از بین دو درخواست موجود در حلقه، اندروید از درخواستی استفاده می کند که ناحیه نمایش برنامه را به حداکثر می رساند.
سازندگان دستگاه میتوانند این رفتار را در برنامهای با
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
اعمال کنند.
پیش نمایش دوربین
پیشنمایش دوربین (یا منظره یاب) برنامههای دوربین میتواند در تبلتها، لپتاپها و نمایشگرهای تاشو بههمتراز نباشد یا مخدوش شود.
موضوع
سند تعریف سازگاری اندروید بیان میکند که حسگر تصویر دوربین "باید به گونهای جهتگیری شود که بعد طولانی دوربین با بعد طولانی صفحه نمایش همسو شود."
برنامهها اغلب فرض میکنند که جهتگیری دستگاه و جهتگیری حسگر دوربین به صورت عمودی است - یک فرض معقول در تلفنهای همراه استاندارد. اما جهت گیری طبیعی تبلت ها و لپ تاپ ها و حسگرهای دوربین آنها می تواند افقی باشد. همچنین، فاکتورهای شکل جدید مانند تاشوها می توانند جهت گیری های طبیعی متعدد و سنسورهای دوربین متعدد در جهت های مختلف داشته باشند.
شروع فعالیتی با جهتگیری دوربینی که برنامه انتظارش را ندارد یا جابهجایی بین دوربینها یا صفحهنمایش دستگاههای مختلف (برای تاشوها) میتواند باعث ایجاد پیشنمایش دوربین نامناسب یا مخدوش شود.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/camera_preview_issue.png?authuser=4&hl=fa)
پیشنمایش دوربین نامناسب و مخدوش در صفحه نمایش بزرگ تاشو.
بهینه سازی
برنامههای دوربین باید جهتگیری دستگاه و جهتگیری حسگر دوربین را به درستی شناسایی و مدیریت کنند تا یک پیشنمایش دوربین بهدرستی تراز و مقیاسشده ارائه کنند. برنامهها باید چرخش دستگاه، چرخش حسگر و نسبت صفحه یا پنجره را محاسبه کنند و سپس نتایج را در پیشنمایش دوربین اعمال کنند. برای راهنمایی دقیق، پیشنمایش دوربین و معرفی نمایاب دوربین را ببینید.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/camera_preview_optimization.png?authuser=4&hl=fa)
پیشنمایش دوربین در همه جهتهای دستگاه به درستی تراز و مقیاس شده است.
راه حل سازگاری
هنگامی که Display#getRotation()
Surface.ROTATION_0
برمی گرداند، یک دستگاه در جهت طبیعی است. این سیستم CameraCharacteristics.SENSOR_ORIENTATION
را از جهت طبیعی دستگاه محاسبه میکند. Android پنجره عمودی برنامههای دارای محدودیت عمودی را با جهت طبیعی دستگاه تراز میکند، چیزی که اکثر برنامهها انتظار دارند. اندروید همچنین زمانی که جهت سنسور افقی و پیش نمایش دوربین به صورت عمودی باشد، تصویر حسگر دوربین را برش می دهد. راه حل های خاص شامل موارد زیر است:
پیشنمایشهای چرخش اجباری دوربین برای برنامههای دارای محدودیت عمودی: برنامههایی که به جهت عمودی محدود میشوند، انتظار دارند جهت طبیعی دستگاه و جهت حسگر دوربین به صورت عمودی باشد. با این حال، در Android 12 (سطح API 31) و بالاتر، اگر سازندگان دستگاه مشخصات جهتگیری را نادیده بگیرند، برنامهها میتوانند در جهتگیریهای مختلف دستگاه اجرا شوند.
هنگامی که یک برنامه با محدودیت پرتره به دوربین متصل می شود، Android force برنامه را می چرخاند تا پنجره پرتره برنامه را با جهت طبیعی دستگاه تراز کند.
در برخی از تبلتها (به دستگاههای مرجع مراجعه کنید)، پنجره عمودی برنامه به حالت پرتره تمام صفحه چرخانده میشود تا با جهت طبیعی دستگاه هماهنگ شود. پس از چرخش نیرو، برنامه تمام صفحه را اشغال می کند.
تبلت - چرخش اجباری برنامه با محدودیت پرتره.
در صفحه داخلی منظره تاشوها (به دستگاههای مرجع مراجعه کنید)، فعالیتهای فقط عمودی به منظره چرخانده میشوند تا با جهت طبیعی بازشده هماهنگ شوند. برنامه پس از چرخش اجباری جعبه نامه می شود.
تاشو - چرخش اجباری برنامه با محدودیت پرتره. این برنامه همچنین جعبه نامه است.
برش دوربین جلوی داخلی: سنسور دوربین جلوی داخلی در برخی از تاشوها در جهت افقی است. اندروید علاوه بر چرخاندن اجباری پیشنمایش دوربین روی نمایشگر داخلی تاشو، میدان دید دوربین جلو (منظره) داخلی را برش میدهد تا حسگر نمای مخالف جهت دستگاه را بگیرد.
پیشنمایشهای دوربین بهروزرسانی اجباری: سیستم از طریق روشهای فعالیت
onStop()
وonStart()
(به طور پیشفرض) یاonPause()
وonResume()
(استفاده شده توسط OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE در هر برنامه نادیده گرفته میشود) پس از چرخش اجباری دوربین میچرخد. به درستی نمایش داده شود.مقیاسبندی نسبت تصویر: سیستم بهطور دینامیکی نسبت تصویر پیشنمایش دوربین چرخانده شده را به حداقل نسبت تصویر بالاتر تغییر میدهد، که تضمین میکند پیشنمایش دوربین بهدرستی مقیاسبندی شده است.
اگر برنامهها پیشنمایش دوربین را به درستی انجام دهند، توسعهدهندگان برنامه میتوانند این راهحلها را نادیده بگیرند. به لغو هر برنامه مراجعه کنید.
API هایی که معمولاً مورد سوء استفاده قرار می گیرند
از آنجایی که Android از ویژگیهایی مانند حالت چند پنجرهای و دستگاههایی مانند تاشوها پشتیبانی میکند، APIهای قدیمی منسوخ شدهاند و با APIهای بهروز جایگزین شدهاند که برای همه اندازههای نمایشگر و عوامل شکل دستگاه کار میکنند. با این حال، API های منسوخ هنوز برای سازگاری با عقب در دسترس هستند.
برخی از View
APIها برای اهداف خاصی طراحی شده اند که همیشه توسط توسعه دهندگان به خوبی درک نمی شوند.
موضوع
توسعهدهندگان همچنان به استفاده از APIهای Display
منسوخ شده ادامه میدهند و به اشتباه فرض میکنند که APIها به جای محدودههای ناحیه نمایش دستگاه، محدوده برنامه را برمیگردانند. یا توسعهدهندگان به اشتباه از APIهای دید ویژه برای دریافت معیارهای نمایش عمومی استفاده میکنند. نتیجه محاسبات نادرست هنگام تغییر مکان عناصر UI پس از رویدادهای تغییر اندازه پنجره برنامه است که باعث مشکلات طرحبندی میشود.
API های نمایش منسوخ شده و معمولاً مورد سوء استفاده قرار می گیرند:
برای اطلاعات بیشتر، به پشتیبانی از حالت چند پنجره ای مراجعه کنید.
APIهای مشاهده سوء استفاده:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/misused_APIs_issue.png?authuser=4&hl=fa)
API منسوخ شده محدودیت های برنامه را اشتباه محاسبه می کند. محتوای برنامه از صفحه خارج می شود.
بهینه سازی
هرگز برای تعیین موقعیت عناصر UI به اندازه نمایشگر فیزیکی اعتماد نکنید. برنامه خود را به APIهای مبتنی بر WindowMetrics
منتقل کنید، از جمله APIهای WindowManager
زیر:
پلتفرم:
جت پک:
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/misused_APIs_optimization.png?authuser=4&hl=fa)
API معیارهای پنجره برنامه را به درستی محاسبه می کند.
راه حل سازگاری
دو نادیده گرفتن APIهای Display
منسوخ و APIهای View
استفاده نادرست را برای بازگرداندن محدوده برنامه تنظیم می کنند: ALWAYS_SANDBOX_DISPLAY_APIS
برای Display
API. OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
برای View
API. 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
، میتواند شامل سبکهایی باشد که فعالیتها را شفاف میکند.
فعالیتهای شفاف تمام فضای نمایش موجود را پوشش نمیدهند، که مدیریت آنها را دشوار میکند زیرا ناحیه نمایش موجود میتواند بر اساس تغییرات پیکربندی مانند چرخش دستگاه، تا کردن و باز کردن دستگاه، و حالت چند پنجرهای تغییر کند.
موضوع
یک فعالیت شفاف باید با مرزهای اولین فعالیت مات زیر فعالیت شفاف در پشته فعالیت وظیفه مطابقت داشته باشد. با این حال، یک فعالیت غیر شفاف که یک گفتگوی مجوز را راه اندازی می کند، می تواند یک ترامپولین باشد (فعالیتی که فعالیت دیگری را راه اندازی می کند و سپس ناپدید می شود). و بنابراین، سیستم نمی تواند محدوده فعالیت ترامپلاین را که فعالیت گفتگوی مجوز شفاف را راه اندازی کرده است، تعیین کند.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/transparent_activities_issue.png?authuser=4&hl=fa)
دیالوگ به دلیل اینکه فعالیت از یک ترامپولین راه اندازی شده بود، به درستی انجام نشد.
بهینه سازی
فعالیتهای شفاف محدودیتهای خود را از مبهمترین فعالیتهای زیر خود در پشته فعالیت یک کار به ارث میبرند. فعالیت غیر شفاف باید برای کل چرخه حیات فعالیت شفاف، از ایجاد فعالیت تا تخریب، در دسترس باشد. به همین دلیل، درخواست های مجوز از فعالیت های ترامپولین را راه اندازی نکنید.
اگر یک فعالیت ترامپلاین یک درخواست مجوز راهاندازی کند، ممکن است کاربر نتواند گفتگوی مجوز را ببیند زیرا فعالیت ترامپلاین قبل از اینکه کاربر فرصتی برای پاسخگویی به گفتگو و ابعاد و موقعیت فعالیت گفتگو داشته باشد از بین میرود. ممکن است اشتباه محاسبه شده باشد
برنامهها همیشه باید درخواستهای مجوز را از فعالیتهایی راهاندازی کنند که تا زمانی که کاربر تصمیمی برای مجوز بگیرد، قابل مشاهده باقی میمانند.
گوشه های گرد
یک فعالیت می تواند به دلیل سبکی که شفافیت پس زمینه را مشخص می کند یا به دلیل اینکه محتوای فعالیت فضای نمایش موجود را پر نمی کند شفاف باشد. اگر یک فعالیت شفاف فضای نمایش موجود را پر کند، سیستم به طور خودکار گوشه های گرد را در زمانی که سازنده دستگاه برای انجام این کار پیکربندی می کند، اعمال می کند. اما، اگر یک فعالیت شفاف (مانند گفتگوی مجوز) فضای موجود را پر نمی کند، این شما هستید که تصمیم می گیرید گوشه های گرد را اعمال کنید یا نه.
گفتگوهای مجوز فضای نمایش موجود را پر نمی کنند زیرا طرح گفتگو معمولاً به جای LayoutParams.MATCH_PARENT از LayoutParams.WRAP_CONTENT استفاده می کند.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/transparent_activities_optimization.png?authuser=4&hl=fa)
گفتگو با گوشه های گرد که به درستی روی فعالیت راه اندازی قابل مشاهده قرار گرفته اند.
راه حل سازگاری
فعالیت هایی که فعالیت های گفتگو را راه اندازی می کنند تا زمانی که کاربر به گفتگو پاسخ ندهد قابل مشاهده نگه دارید.
این سیستم تضمین میکند که یک فعالیت شفاف تمام محدودیتها را از اولین فعالیت غیرشفاف در زیر فعالیت شفاف در پشته فعالیت به ارث میبرد، از جمله محدودیتهای مربوط به:
- حالت سازگاری با اندازه
- جهت گیری
- نسبت تصویر
بازی های یونیتی
بازیهای یونیتی روی تمام صفحه اندروید یا در حالت چند پنجرهای اجرا میشوند. با این حال، وقتی برنامه در حالت چند پنجره ای قرار می گیرد، بسیاری از بازی های یونیتی تمرکز خود را از دست می دهند و طراحی محتوا متوقف می شود.
موضوع
یونیتی برای پشتیبانی از حالت چند پنجره ای در اندروید، یک گزینه Resizable Window
را در Unity 2019.4 اضافه کرد. با این حال، پیادهسازی اولیه به چرخه حیات فعالیت در حالت چند پنجرهای به درستی واکنش نشان نداد و باعث شد وقتی برنامه تمرکز خود را از دست داد، UnityPlayer پخش را متوقف کند. بازیکن یک صفحه سیاه یا آخرین فریم ثابت بازی را ارائه کرد. بازی فقط زمانی از سر گرفته میشد که کاربر روی صفحه ضربه میزد. بسیاری از برنامههایی که از موتور Unity استفاده میکنند با این مشکل مواجه هستند و در حالت چند پنجرهای بهعنوان یک پنجره سیاه رندر میشوند.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/unity_games_issue.gif?authuser=4&hl=fa)
بازی در حالت چند پنجره ای تمرکز خود را از دست می دهد و به صورت یک پنجره سیاه رندر می شود.
بهینه سازی
Unity را به 2019.4.40 یا جدیدتر ارتقا دهید و بازی خود را دوباره صادر کنید. گزینه Resizable Window
را در تنظیمات Player Android علامت بزنید، در غیر این صورت، زمانی که بازی در فوکوس نیست، حتی اگر بازی کاملاً در حالت چند پنجره ای قابل مشاهده باشد، بازی متوقف می شود.
![](https://developer.android.com/static/images/guide/practices/compatibility-mode/unity_games_optimization.gif?authuser=4&hl=fa)
بازی محتوا را در حالت چند پنجره ای به درستی رندر می کند حتی زمانی که در فوکوس نیست.
راه حل سازگاری
سازندگان دستگاه میتوانند OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
را برای هر برنامه لغو کنند تا یک رویداد فوکوس جعلی را برای یک برنامه در حالت چند پنجرهای ارائه کنند. لغو به فعالیت امکان می دهد محتوا را دوباره ترسیم کند و سیاه نشود.
برنامه خود را برای مشکلات سازگاری آزمایش کنید
برای آزمایش برنامه خود و درک نحوه عملکرد آن در فاکتورهای مختلف، از منابع زیر استفاده کنید:
- پخش جریانی دستگاه: برای آزمایش برنامهتان در دستگاههای تولیدی (از جمله دستگاههای مرجع ) که در مراکز داده Google میزبانی میشوند، به پخش جریانی دستگاه Android، ارائهشده توسط Firebase مراجعه کنید.
- شبیه سازها در Android Studio Hedgehog: برای اطلاعات در مورد ایجاد شبیه ساز برای دستگاه های مرجع، به ایجاد و مدیریت دستگاه های مجازی مراجعه کنید.
- شبیه ساز قابل تغییر اندازه اندروید استودیو: برای اطلاعات در مورد دسترسی به دستگاه های مجازی، به اجرای برنامه ها در شبیه ساز Android مراجعه کنید.
صندوق دار است
بررسی کنید که هر فعالیتی بتواند از تمام فضای نمایش در دسترس برنامه استفاده کند. ابتدا کد زیر را در پوشه تست خود اعلام کنید:
کاتلین
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() } }
جاوا
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(); }
سپس آزمایشی را برای اثبات رفتار اجرا کنید و مطمئن شوید که فعالیت هدف در جعبه نامه نیست:
کاتلین
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
جاوا
@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 (سطح API 34) و بالاتر، کاربران میتوانند از طریق تنظیمات دستگاه، برنامهها را لغو کنند.
نادیده گرفتن کاربر برای هر برنامه
در اندروید 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 API | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | از تغییر رفتار هر API نمایشگر جلوگیری می کند. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Display API های موجود در برنامه را مجبور می کند تا محدوده های برنامه را برگردانند. Display APIs محدودههای منطقی ناحیه نمایش را برمیگرداند، اما گاهی اوقات برنامه فرض میکند Display APIs محدوده برنامه را برمیگرداند، که منجر به مشکلات UI میشود. | |
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | View API های مورد استفاده در برنامه را مجبور می کند تا محدوده برنامه را برگرداند. View APIs محدودههای منطقی ناحیه نمایش را برمیگرداند، اما گاهی اوقات برنامه فرض میکند View APIs محدودیتهای برنامه را برمیگرداند، که منجر به مشکلات UI میشود. | |
سازگار با دوربین | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | چرخش نیرو را خاموش می کند. بهطور پیشفرض، وقتی پیشنمایش دوربین باز است، همه برنامههای دوربین با جهت ثابت به زور میچرخند. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | بهروزرسانی سخت پیشفرض اعمال شده هنگام چرخش اجباری پیشنمایش دوربین را حذف میکند. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | هنگامی که پیشنمایش دوربین به زور میچرخد، بهروزرسانی سخت را به تازهسازی ملایم تغییر میدهد، که به حفظ حالت در طول چرخش نیرو کمک میکند. بهطور پیشفرض، زمانی که پیشنمایش دوربین به اجبار چرخانده میشود، اندروید یک بهروزرسانی سخت اعمال میکند. بهروزرسانی سخت میتواند باعث از دست رفتن وضعیت یا سیاه شدن برنامهها شود، بسته به اینکه برنامهها چگونه حالت قبلی خود را در حافظه پنهان ذخیره کردهاند. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | بافر تصویر دوربین جلوی داخلی را برش می دهد. اگر لغو غیرفعال باشد، برش دوربین جلوی داخلی حذف میشود و میدان دید پیشنمایش دوربین افزایش مییابد. به طور پیشفرض در برخی از تاشوها (به دستگاههای مرجع مراجعه کنید)، هنگام استفاده از دوربین جلوی داخلی، سیستم پیشنمایش دوربین همه برنامههای دوربین را برش میدهد. | |
متفرقه | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | از سیاه شدن برنامه در هنگام از دست دادن تمرکز برنامه در حالت تقسیم صفحه جلوگیری می کند. برنامه قبل از ترسیم محتوای برنامه منتظر فوکوس می ماند، که می تواند باعث مسدود شدن یا سیاه شدن برنامه شود. لغو به اندروید امکان میدهد یک رویداد فوکوس جعلی را به برنامه ارسال کند، که به برنامه سیگنال میدهد تا دوباره شروع به ترسیم محتوا کند. |
FORCE_RESIZE_APP
بسته هایی را که override برای آنها اعمال می شود مجبور به تغییر اندازه می کند. تغییری در قرار دادن برنامه در حالت چندپنجره ای ایجاد نمی کند، اما به برنامه اجازه می دهد تا در صورت تغییر اندازه صفحه، بدون وارد کردن حالت سازگاری با اندازه، اندازه را تغییر دهد.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
در مانیفست برنامه، یا مشخصه 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
Attribute و android.supports_size_changes
را روی false
در مانیفست برنامه قرار دهید ، و یا یک جهت گیری یا محدودیت نسبت ابعاد را اعلام کنید.
نحوه بهینه سازی برنامه ها
تمام برنامه هایی که در صورت تغییر اندازه رفتار می کنند باید دارای android:resizeableActivity
یا android.supports_size_changes
تنظیم شده در true
. برنامه های دیگر باید بهبود یابند تا در هنگام تغییر اندازه خوب رفتار کنند. به Android: ResizeAbleactivity مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Property Flag 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 را حذف می کنند.
override_min_aspect_ratio
دروازه بان برای همه غلبه می کند که یک نسبت حداقل ابعاد را مجبور می کنند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
android:minAspectRatio
در سطح فعالیت یا برنامه.
نحوه بهینه سازی برنامه ها
محدودیت های نسبت ابعاد را در برنامه خود تعیین نکنید. اطمینان حاصل کنید که برنامه شما از اندازه های مختلف صفحه پشتیبانی می کند . از کلاس های اندازه پنجره برای پشتیبانی از طرح بندی های مختلف بر اساس میزان فضایی که برنامه شما روی صفحه نمایش دارد ، استفاده کنید. به API Compose WindowSizeClass
مراجعه کرده و API WindowSizeClass
را مشاهده کنید .
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
محدودیت نسبت ابعاد را مشخص کنید یا ویژگی Flag 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 را حذف می کنند.
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 را حذف می کنند.
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 را حذف می کنند.
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 را حذف می کنند.
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 را حذف می کنند.
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 را حذف می کنند.
override_any_orientation
غلبه های زیر را قادر می سازد تا هرگونه جهت گیری را نادیده بگیرند:
- override_undefined_orientation_to_portrait
- override_undefined_orientation_to_nosensor
- override_landscape_orientation_to_reverse_landscape
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
activity:screenOrientation
، یا از API 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 را حذف می کنند.
override_any_orientation_to_user
برنامه را قادر می سازد فضای نمایش موجود را پر کند. محدودیت های جهت گیری ، قابلیت انعطاف پذیری و نسبت ابعاد مشخص شده در مانیفست برنامه را تحت الشعاع قرار می دهد. همچنین هرگونه تماس به Activity#setRequestedOrientation()
را نادیده می گیرد.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
android:screenOrientation
Attribute را تنظیم نکنید ، یا ویژگی را روی"user"
تنظیم کنید.android:resizeableActivity
Attribute را بهtrue
تنظیم کنید.در صفحه های کوچک ، برای پشتیبانی از تغییر مکان در هنگام غیرفعال کردن حالت Multi -Window با
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 را حذف می کنند.
override_undefined_orientation_to_portrait
جهت گیری پرتره را برای کلیه فعالیتهای موجود در بسته فعال می کند. مگر در مواردی که Override_Any_Orientation فعال شود ، از Override فقط درصورتی استفاده می شود که هیچ جهت گیری ثابت دیگری توسط فعالیت مشخص نشده باشد.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
به 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 را حذف می کنند.
override_undefined_orientation_to_nosensor
جهت گیری NOSENSOR را برای کلیه فعالیت های موجود در بسته امکان پذیر می کند. مگر در مواردی که Override_Any_Orientation فعال شود ، از Override فقط درصورتی استفاده می شود که هیچ جهت گیری ثابت دیگری توسط فعالیت مشخص نشده باشد.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
به 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 را حذف می کنند.
override_landscape_orientation_to_reverse_landscape
جهت گیری ReverselandScape را برای کلیه فعالیت های موجود در بسته فعال می کند. مگر در مواردی که Override_Any_Orientation فعال شود ، از Override فقط درصورتی استفاده می شود که هیچ جهت گیری ثابت دیگری توسط فعالیت مشخص نشده باشد.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
به 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 را حذف می کنند.
override_orientation_only_for_camera
محدودیت های override_undefined_orientation_to_portrait ، override_undefined_orientation_to_nosensor ، و override_landscape_orientation_to_landscape overrids برای اینکه فقط در هنگام فعال بودن اتصال دوربین اثر بگذارد.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
به 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 را حذف می کنند.
override_use_display_landscape_natural_orientation
هنگام تحقق شرایط زیر ، جهت گیری نمایش را به جهت گیری طبیعی چشم انداز محدود می کند:
- فعالیت تمام صفحه است
- از Propertiplate Component
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
خودداری کنید - سازنده دستگاه تنظیم درخواست جهت گیری برای نمایشگر فعال است
- جهت گیری طبیعی صفحه نمایش منظره است
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.
نحوه بهینه سازی برنامه ها
به OVERRIDE_ANY_ORIENTATION
مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Property Flag 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 را حذف می کنند.
override_enable_compat_ignore_requested_orientation
خط مشی سازمانی را که به روزرسانی جهت گیری برنامه را در پاسخ به Activity#setRequestedOrientation()
در هنگام راه اندازی مجدد برنامه یا دارای یک درمان با دوربین فعال ، امکان پذیر می کند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
Propertial Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
true
تنظیم کنید.
نحوه بهینه سازی برنامه ها
به OVERRIDE_ANY_ORIENTATION
مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Properties Flag 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 را حذف می کنند.
override_enable_compat_ignore_orientation_request_when_loop_detected
خط مشی سازگاری را که در پاسخ به فعالیت برنامه فراخوانی برنامه Activity#setRequestedOrientation()
بیش از دو بار در یک ثانیه در صورت عدم فعالیت در یک فعالیت برای جهت گیری ثابت ، از جهت گیری درخواست شده برنامه استفاده می کند ، امکان پذیر می کند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.
نحوه بهینه سازی برنامه ها
به OVERRIDE_ANY_ORIENTATION
مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Property Flag PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
to 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 را حذف می کنند.
override_respect_requested_orientation
بسته های مربوط به نادیده گرفتن رفتار درخواست جهت گیری را که توسط تولید کنندگان دستگاه برای یک منطقه نمایشگر یا کل نمایشگر امکان پذیر است ، حذف نمی کند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.
نحوه بهینه سازی برنامه ها
به OVERRIDE_ANY_ORIENTATION
مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
بدون امتناع اگر برنامه با دستگاهی که تولید کننده دستگاه را دارد ، تنظیم درخواست جهت گیری را فعال نمی کند ، غیرفعال کردن می تواند خطرناک باشد. برای غیرفعال کردن Override با روابط توسعه دهنده Android تماس بگیرید.
پرچم های خاصیت برای تنظیم نادیده گرفتن
هیچ پرچم ملک برای این غلبه وجود ندارد.
دستورات ADB برای تست نادیده گرفتن
برای اعمال نادیده گرفتن:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
برای حذف نادیده گرفتن:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا Override را حذف می کنند.
Never_sandbox_display_apis
بسته ها را مجبور می کنند که هرگز دارای Display
API برای فعالیت حالت سازگاری یا اندازه سازگاری با جعبه استفاده شوند. API های Display
همچنان محدودیت های منطقه نمایش را ارائه می دهند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
با تنظیم android:resizeableActivity
Attribute به true
یا android.supports_size_changes
پرچم ابرداده به true
اعلام کنید.
نحوه بهینه سازی برنامه ها
برنامه هایی که اعلام می کنند کاملاً قابل انعطاف هستند ، هرگز نباید به اندازه صفحه نمایش عناصر UI متکی باشند. برنامه خود را به API های Up -to -Date که WindowMetrics
ارائه می دهد ، مهاجرت کنید. اگر از JetPack Compose استفاده می کنید ، از API WindowSizeClass
استفاده کنید تا UI را بر اساس میزان صفحه صفحه نمایش در صفحه نمایش فعلی ترسیم کنید. کلاسهای اندازه پنجره را ببینید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
بدون امتناع از API های مستهلک مهاجرت کنید.
پرچم های خاصیت برای تنظیم نادیده گرفتن
هیچ پرچم ملک برای این غلبه وجود ندارد.
دستورات ADB برای تست نادیده گرفتن
برای اعمال نادیده گرفتن:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
برای حذف نادیده گرفتن:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا Override را حذف می کنند.
Always_Sandbox_Display_apis
بسته ها را مجبور می کند که همیشه بدون توجه به حالت پنجره ، ماسهبازی API Display
داده شود. API های Display
همیشه مرزهای برنامه را ارائه می دهند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
با تنظیم android:resizeableActivity
ویژگی به false
یا android.supports_size_changes
پرچم ابرداده را به false
اعلام کنید.
نحوه بهینه سازی برنامه ها
برنامه هایی که اعلام می کنند کاملاً قابل انعطاف هستند ، هرگز نباید به اندازه نمایش عناصر UI متکی باشند. برنامه خود را از API های مستهلک به API های Up -to -Date که WindowMetrics
را ارائه می دهد ، مهاجرت کنید. به WindowMetricsCalculator
مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
بدون امتناع از API های مستهلک مهاجرت کنید.
پرچم های خاصیت برای تنظیم نادیده گرفتن
هیچ پرچم ملک برای این غلبه وجود ندارد.
دستورات ADB برای تست نادیده گرفتن
برای اعمال نادیده گرفتن:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
برای حذف نادیده گرفتن:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا Override را حذف می کنند.
Override_sandbox_view_bounds_apis
بسته ها را به Sandbox مجبور می کند API های View
زیر را به مرزهای فعالیت:
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
مسئله را در کد برنامه با استفاده از API ها که مرزهای پنجره برنامه را فراهم می کند و جبران می کند نسبت به پنجره برنامه به جای محدودیت های نمایشگر دستگاه و جبران خسارت نسبت به صفحه نمایش دستگاه حل کنید.
نحوه بهینه سازی برنامه ها
برنامه ها باید با در نظر گرفتن امکان استفاده از جعبه نامه و حالت چند پنجره برای برنامه ، از API های View
استفاده کنند. به WindowMetricsCalculator
مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Properties Flag 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 را حذف می کنند.
override_camera_compat_disable_force_rotation
چرخش نیرو را غیرفعال می کند. تجربه کاربر را در برخی از برنامه ها بهبود می بخشد.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
Property Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
را به false
تنظیم کنید.
نحوه بهینه سازی برنامه ها
به جهت گیری سنسور دوربین ذخیره شده یا اطلاعات دستگاه اعتماد نکنید. برای راهنمایی سازگاری دوربین ، به معرفی منظره یاب دوربین و سطوح قابل تنظیم در برنامه دوربین خود مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Property Flag 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 را حذف می کنند.
override_camera_compat_disable_refresh
بعد از چرخش نیرو ، فعالیت را غیرفعال می کند. تجربه کاربر را بهبود می بخشد در هنگام تازه کردن باعث از بین رفتن حالت در برنامه ها می شود.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
Property Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
false
تنظیم کنید.
نحوه بهینه سازی برنامه ها
به Override_Camera_Compat_Disable_Force_Rotation مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Property Flag 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 را حذف می کنند.
override_camera_compat_enable_refresh_via_pause
بسته های مورد استفاده خود را برای انجام تازه فعالیت با استفاده از onResume()
→ onPause()
→ onResume()
به جای onResume()
→ onStop()
→ onResume()
پس از چرخش نیروی سازگاری دوربین ایجاد می کند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
Property Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
true
تنظیم کنید.
نحوه بهینه سازی برنامه ها
به Override_Camera_Compat_Disable_Force_Rotation مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Property Flag 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 را حذف می کنند.
override_camera_landscape_to_portrait
هنگامی که جهت گیری دوربین پرتره با جهت گیری دستگاه طبیعی مطابقت نداشته باشد ، خروجی دوربین را مجبور می کند تا به جهت مخالف برسد. بسیاری از برنامه ها این وضعیت را اداره نمی کنند و در غیر این صورت تصاویر کشیده را نمایش می دهند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
Property Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
true
تنظیم کنید.
نحوه بهینه سازی برنامه ها
به Override_Camera_Compat_Disable_Force_Rotation مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Property Flag 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 را حذف می کنند.
override_disable_media_projection_single_app_option
از انتخاب برنامه ها از اشتراک گذاری صفحه برنامه جلوگیری می کند (به پیش بینی رسانه مراجعه کنید). هنگامی که برنامه ها از API createConfigForDefaultDisplay()
برای مجبور کردن ضبط کامل در صفحه و به خطر انداختن حریم شخصی کاربر با افشای محتوای اعلان ها ، که با صفحه نمایش کامل اما به اشتراک گذاری صفحه برنامه ، و همه برنامه ها بدون در نظر گرفتن حالت پنجره ، به خطر می افتد ، اجرا می شود.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
اجازه دهید رفتار پیش فرض پیش فرض رسانه (در Android 14 ، API سطح 34 ، با createScreenCaptureIntent()
) اجرا شود ، که کاربران را قادر می سازد تصمیم بگیرند که آیا بدون در نظر گرفتن حالت پنجره ، صفحه نمایش کامل یا یک پنجره برنامه واحد را به اشتراک بگذارند. یا با MediaProjectionConfig
createScreenCaptureIntent(MediaProjectionConfig)
تماس با createConfigForUserChoice()
تماس بگیرید.
نحوه بهینه سازی برنامه ها
به کاربران اجازه دهید انتخاب کنند که آیا کل نمایشگر دستگاه یا یک پنجره برنامه را در طول طرح ریزی رسانه به اشتراک می گذارند ، که از نظر Android 14 رفتار پیش فرض است.
برای پشتیبانی از حالت Multi -Window ، برنامه خود را قابل ذخیره سازی ( resizeableActivity="true"
) کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
به دلیل جدی بودن حریم شخصی کاربر ، برنامه شما نمی تواند از این نادیده گرفته شود یا از این امر خودداری کند.
پرچم های خاصیت برای تنظیم نادیده گرفتن
هیچ کدام.
دستورات ADB برای تست نادیده گرفتن
برای اعمال Override ، که انصراف برنامه را از اشتراک گذاری جزئی از صفحه نمایش لغو می کند (یعنی اشتراک گذاری صفحه جزئی را امکان پذیر می کند):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
برای حذف Override ، که اجازه می دهد برنامه از اشتراک گذاری جزئی از صفحه خارج شود:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا Override را حذف می کنند.
override_enable_compat_fake_focus
ارسال فوکوس جعلی برای برنامه های فوکوس نشده در حالت اسپلیت صفحه را امکان پذیر می کند. برخی از موتورهای بازی قبل از ترسیم محتوای برنامه منتظر تمرکز هستند. و بنابراین ، Fake Focus به برنامه ها کمک می کند تا هنگام از سرگیری از سیاه پوست خودداری کنند و هنوز تمرکز ندارند.
چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند
Property Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
true
تنظیم کنید.
نحوه بهینه سازی برنامه ها
اگر برنامه شما دارای چندین جهت گیری باشد و پیکربندی به خوبی تغییر کند ، می توانید از این مسئله جلوگیری کنید. برنامه خود را با دنبال کردن دستورالعمل های کیفیت برنامه صفحه نمایش بزرگ ، صفحه بزرگ را آماده کنید.
اگر موتور بازی Unity را اجرا می کنید ، به نسخه 2019.4.40 یا بعد از آن ارتقا دهید و بازی خود را دوباره وارد کنید. گزینه Resizable Window
را در تنظیمات Android Player بررسی کنید.
نحوه غیرفعال کردن یا انصراف از نادیده گرفتن
Properties Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
را به false
تنظیم کنید.
پرچم های خاصیت برای تنظیم نادیده گرفتن
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
دستورات ADB برای تست نادیده گرفتن
برای اعمال نادیده گرفتن:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
برای حذف نادیده گرفتن:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا Override را حذف می کنند.
منابع اضافی
- دستورالعمل های کیفیت برنامه صفحه نمایش بزرگ
- دستورالعمل های کیفیت برنامه اصلی