Android یک حالت سازگاری را برای برنامههایی فعال میکند که جهتگیری یا محدودیتهای تغییر اندازه را اعلام میکنند. حالت سازگاری عملکرد قابل قبول برنامه را در دستگاههای صفحه بزرگ و تلفنهای تاشو اما با قابلیت استفاده کمتر از حد مطلوب تضمین میکند.
لغو هر برنامه به سازندگان دستگاه امکان می دهد تا رفتار برنامه را تغییر دهند تا تجربه کاربر را بهبود بخشند یا از خراب شدن برنامه ها در دستگاه های خاص جلوگیری کنند.
دستگاه های مرجع
دستگاههای زیر ممکن است به دلیل پیکربندیهای غیرمعمول یا پیکربندیهایی که بهخوبی توسط برنامهها پشتیبانی نمیشوند، نیاز به لغو هر برنامه داشته باشند:
- تبلت ها: جهت گیری طبیعی برخی تبلت ها مانند تبلت پیکسل، منظره است. هنگامی که
Display#getRotation()
Surface.ROTATION_0
را برمی گرداند، یک دستگاه در جهت طبیعی خود قرار دارد. اگر برنامهها فرض کنندROTATION_0
عمودی است، طرحبندی برنامه و پیشنمایش دوربین ممکن است با نمایشگر دستگاه مطابقت نداشته باشد. - تاشوهای افقی: برخی از دستگاههای تاشو، مانند Pixel Fold، در حالت تاشو حالت عمودی دارند، اما زمانی که باز میشوند، جهت افقی دارند. اگر برنامهها فرض کنند جهت بازشده عمودی است، حلقههای سوسو زدن یا مشکلات طرحبندی محتمل است.
- تلفنهای تاشو تاشو: تلفنهای تاشو معمولاً در جهت عمودی هستند. اما، زمانی که گوشی ها تا شوند، معمولاً صفحه نمایش کوچکی در جهت افقی دارند. برنامهها باید جهتهای مختلف نمایشگرها را شناسایی کرده و مطابقت دهند.
مشکلات رایج سازگاری
برنامهها اغلب به دلیل محدودیتهای جهتگیری برنامه، محدودیتهای اندازه و نسبت ابعاد، مدیریت نادرست جهتگیری پیشنمایش دوربین و استفاده نادرست از APIها، مشکلات سازگاری را تجربه میکنند.
نامه نگاری
Letterboxing برنامه را در مرکز صفحه یا در صفحه های بزرگ در یک طرف یا طرف دیگر برای دسترسی راحت قرار می دهد. مات ها (نوارهای تک رنگ یا کاغذدیواری تار) ناحیه نمایش استفاده نشده را در امتداد طرفین یا بالا و پایین برنامه پر می کنند.
Letterboxing اغلب در دستگاههای صفحهنمایش بزرگ اتفاق میافتد، زیرا ابعاد و نسبت ابعاد نمایشگر دستگاه معمولاً متفاوت از تلفنهای استاندارد است که بیشتر برنامهها برای آن طراحی شدهاند.

شکل 1. برنامه محدود به جهت عمودی روی تبلت منظره بسته بندی شده و قابل تاشو است.
موضوع
برنامه از همه پیکربندیهای نمایشگر پشتیبانی نمیکند، زیرا برنامه دارای جهتگیری ثابت، نسبت تصویر ثابت است یا قابل تغییر اندازه نیست.
تنظیمات پیکربندی که جهت گیری برنامه و قابلیت تغییر اندازه را کنترل می کند شامل موارد زیر است:
screenOrientation
: یک جهت ثابت برای یک برنامه مشخص می کند. برنامهها همچنین میتوانند جهتگیری را در زمان اجرا با استفاده ازActivity#setRequestedOrientation()
تنظیم کنند.resizeableActivity
: نشان می دهد که آیا سیستم می تواند اندازه برنامه ها را متناسب با پنجره هایی با ابعاد مختلف تغییر دهد. در Android 11 (سطح API 30) و پایینتر، مشخص میکند که آیا برنامهها از حالت چند پنجرهای پشتیبانی میکنند یا خیر. در Android 12 (سطح API 31) و بالاتر، مشخص میکند که آیا برنامهها از حالت چند پنجرهای در صفحههای کوچک پشتیبانی میکنند ( کلاس اندازه پنجره جمعوجور). در Android 12 و بالاتر، برنامهها بدون توجه به این تنظیم، از حالت چند پنجرهای در صفحههای بزرگ (کلاس اندازه پنجره متوسط یا بزرگ) پشتیبانی میکنند.maxAspectRatio
: حداکثر نسبت تصویر پشتیبانی شده توسط برنامه را مشخص می کند. فقط برنامههایی کهresizeableActivity
رویfalse
تنظیم شده است میتوانندmaxAspectRatio
تنظیم کنند.minAspectRatio
: حداقل نسبت تصویر پشتیبانی شده توسط برنامه را مشخص می کند. فقط برنامههایی کهresizeableActivity
رویfalse
تنظیم شده است میتوانندminAspectRatio
تنظیم کنند.

برنامه محدود به جهت عمودی است که در دستگاه افقی قابل استفاده نیست.
بهینه سازی
برنامه باید از همه جهتها و اندازههای نمایشگر حالت چند پنجرهای و دستگاه پشتیبانی کند. تمام محدودیتهای جهتگیری و نسبت تصویر ثابت را از طرحبندی برنامه و فایل مانیفست برنامه خود حذف کنید.

برنامه از تمام جهت گیری های دستگاه پشتیبانی می کند.
راه حل سازگاری
اگر برنامهای با جهت ثابت یا نسبت تصویر ثابت در پنجرهای اجرا میشود که برنامه مستقیماً از اندازه یا جهت پنجره پشتیبانی نمیکند، Android برای حفظ تداوم، برنامه را جعبه نامه میکند.
با شروع Android 12 (سطح API 31) و ادامه با 12L (سطح API 32)، این پلتفرم پیشرفتهای مختلفی را برای برنامههای جعبه نامه اعمال میکند. سازندگان دستگاه پیشرفتهای UI را پیادهسازی میکنند. برای بهره مندی از بهبودها، نیازی به توسعه اضافی ندارید.
اندروید 12 (سطح API 31) پیشرفت های زیبایی شناسی زیر را معرفی می کند که می توانند توسط سازندگان دستگاه پیکربندی شوند:
- گوشههای گرد: گوشههای پنجره برنامه ظاهر ظریفتری دارند.
- شفافیت نوار سیستم: نوارهای وضعیت و ناوبری، که روی برنامه قرار می گیرند، نیمه شفاف هستند و باعث می شوند نمادهای روی نوارها همیشه در پس زمینه صندوق نامه قابل مشاهده باشند.
- نسبت تصویر قابل تنظیم: نسبت تصویر برنامه را می توان برای بهبود ظاهر برنامه تنظیم کرد.

شکل 2. برنامه Letterboxed با پیشرفت های رابط کاربری.
12L (سطح API 32) بهبودهای عملکردی زیر را اضافه می کند:
موقعیت یابی قابل تنظیم: در صفحه نمایش های بزرگ، سازندگان دستگاه می توانند برنامه را در سمت چپ یا راست نمایشگر قرار دهند و تعامل را آسان تر کنند.
طراحی مجدد دکمه راه اندازی مجدد: سازندگان دستگاه می توانند به دکمه راه اندازی مجدد برای حالت سازگاری با اندازه ظاهر جدیدی برای تشخیص بهتر توسط کاربران بدهند.
Android 13 (سطح API 33) یک گفتگوی آموزش کاربر درباره قرار دادن برنامه جعبه نامه روی صفحه یا قرار دادن صندوق نامه در حالت تقسیم صفحه اضافه می کند:

شکل 3. برنامه جعبه نامه با محاوره آموزش کاربر.
حالت سازگاری با اندازه
حالت سازگاری با اندازه، جعبه نامه است که نسبت ابعاد برنامه را حفظ می کند و شامل کنترل راه اندازی مجدد است. این کنترل به کاربران امکان می دهد تا برنامه را مجدداً راه اندازی کنند و نمایشگر را دوباره ترسیم کنند. Android حالت سازگاری اندازه را برای برنامههایی که قابل تغییر اندازه نیستند فراخوانی میکند. هنگامی که یک فعالیت به محفظه نمایشگر ناسازگار با ابعاد فعالیت منتقل میشود، سیستم ممکن است برنامه را تغییر دهد تا نمایشگر دستگاه را حداقل در یک بعد پر کند.
تغییرات پیکربندی دستگاه که می تواند حالت سازگاری اندازه را فعال کند شامل موارد زیر است:
- چرخش دستگاه
- تاشو یا باز شدن دستگاه تاشو
- بین حالت نمایش تمام صفحه و تقسیم صفحه تغییر دهید
موضوع
حالت سازگاری اندازه معمولاً برای فعالیتهایی اعمال میشود که از نظر جهت یا نسبت ابعاد محدود شدهاند و پیکربندی شدهاند (یا توسط سیستم تعیین میشوند) تا غیرقابل تغییر اندازه باشند.
اگر برنامه شما هر یک از معیارهای زیر را داشته باشد قابل تغییر اندازه در نظر گرفته می شود - و در حالت سازگاری با اندازه قرار نمی گیرد:
- قابل تغییر اندازه با
resizeableActivity="true"
- از حالت تصویر در تصویر (PIP) پشتیبانی می کند
- تعبیه شده است
- آیا لغو
FORCE_RESIZE_APP
برای هر برنامه توسط سازنده دستگاه اعمال شده است (خواص تنظیم شده توسط برنامه نادیده گرفته می شود)
اگر برنامه شما هیچ یک از شرایط را نداشته باشد ، قابل تغییر در اندازه نیست و می تواند در حالت سازگاری با اندازه قرار گیرد.

برنامه غیرقابل تغییر اندازه در حالت چند پنجره ای خراب می شود.
بهینه سازی
برنامه باید از همه اندازه های نمایش پشتیبانی کند. با تنظیم ویژگی android:resizeableActivity
عنصر <activity>
یا <application>
در true
برنامه، اندازه برنامه خود را قابل تغییر اندازه کنید. طرحبندیهای واکنشگرا/تطبیقی برای برنامه خود طراحی کنید. برای اطلاعات بیشتر، به پشتیبانی از اندازه های مختلف نمایشگر و پشتیبانی از حالت چند پنجره ای مراجعه کنید.

برنامه در تمام اندازه های پنجره کار می کند.
راه حل سازگاری
اندروید یک برنامه را در حالت سازگاری با اندازه قرار میدهد وقتی سیستم تعیین میکند که نمایش برنامه جعبه نامه را میتوان با تغییر مقیاس برنامه بهبود داد تا پنجره نمایش حداقل در یک بعد پر شود. سیستم یک کنترل راه اندازی مجدد را نمایش می دهد که فرآیند برنامه را دوباره ایجاد می کند، فعالیت را دوباره ایجاد می کند و نمایشگر را دوباره ترسیم می کند. همچنین به بررسی اجمالی فرآیندها و موضوعات مراجعه کنید.

برنامه فقط پرتره با جعبه نامه در جهت افقی، با کنترل راه اندازی مجدد مقیاس شده است.
حلقه های سوسو
هنگامی که برنامهای از همه جهتهای نمایشگر پشتیبانی نمیکند، ممکن است به طور مکرر جهتگیریهای جدید را در صورت ایجاد تغییر پیکربندی درخواست کند و یک حلقه بینهایت ایجاد کند که باعث میشود صفحه نمایش سوسو بزند یا برنامه بیپایان بچرخد.
موضوع
در 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)
را فراخوانی کند و حلقه بی نهایت را ادامه دهد.

برنامه فقط افقی روی صفحه نمایش عمودی تماس های مکرری با Activity#setRequestedOrientation()
برقرار می کند.
بهینه سازی
برنامه ها نباید کارهای زیر را انجام دهند:
- جهت گیری پیش فرض را با
Activity#setRequestedOrientation()
در متد ActivityonCreate()
تنظیم کنید زیرا درخواست جهت گیری می تواند به طور غیرمنتظره ای با تغییرات پیکربندی کنترل نشده راه اندازی شود. - فرض کنید جهت طبیعی دستگاه (
ROTATION_0
) عمودی است - جهتگیری را بر اساس سیگنالهایی تنظیم کنید که به اندازه پنجره فعلی مرتبط نیستند، مانند
Display#getRotation()
، وجود یکFoldingFeature
یا APIهای منسوخ شده .

برنامه تغییر پیکربندی را کنترل می کند، محدودیت جهت گیری ندارد، بنابراین وارد یک حلقه سوسو نمی شود.
راه حل سازگاری
Android تماسهای Activity#setRequestedOrientation()
را در شرایط زیر نادیده میگیرد:
فعالیت قبلاً از فراخوانی قبلی به روش راه اندازی مجدد شده است یا درمان چرخش نیروی سازگار با دوربین فعال شده است ( پیش نمایش دوربین را در زیر ببینید).
سازندگان دستگاه میتوانند این رفتار را در برنامهای با
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
اعمال کنند.این اکتیویتی بیش از دو درخواست جهت یابی را در یک ثانیه انجام داد که نشان می دهد یک حلقه رخ داده است. از بین دو درخواست موجود در حلقه، اندروید از درخواستی استفاده می کند که ناحیه نمایش برنامه را به حداکثر می رساند.
سازندگان دستگاه میتوانند این رفتار را در برنامهای با
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
اعمال کنند.
پیش نمایش دوربین
پیشنمایش دوربین (یا منظره یاب) برنامههای دوربین میتواند در تبلتها، لپتاپها و نمایشگرهای تاشو بههمتراز نباشد یا مخدوش شود.
موضوع
سند تعریف سازگاری اندروید بیان میکند که حسگر تصویر دوربین "باید به گونهای جهتگیری شود که بعد طولانی دوربین با بعد طولانی صفحه نمایش همسو شود."
برنامهها اغلب فرض میکنند که جهتگیری دستگاه و جهتگیری حسگر دوربین به صورت عمودی است - یک فرض معقول در تلفنهای همراه استاندارد. اما جهت گیری طبیعی تبلت ها و لپ تاپ ها و حسگرهای دوربین آنها می تواند افقی باشد. همچنین، فاکتورهای شکل جدید مانند تاشوها می توانند جهت گیری های طبیعی متعدد و سنسورهای دوربین متعدد در جهت های مختلف داشته باشند.
شروع فعالیتی با جهتگیری دوربینی که برنامه انتظارش را ندارد یا جابهجایی بین دوربینها یا صفحهنمایش دستگاههای مختلف (برای تاشوها) میتواند باعث ایجاد پیشنمایش دوربین نامناسب یا مخدوش شود.

پیشنمایش دوربین نامناسب و مخدوش در صفحه نمایش بزرگ تاشو.
بهینه سازی
برنامههای دوربین باید جهتگیری دستگاه و جهتگیری حسگر دوربین را به درستی شناسایی و مدیریت کنند تا یک پیشنمایش دوربین بهدرستی تراز و مقیاسشده ارائه کنند. برنامهها باید چرخش دستگاه، چرخش حسگر و نسبت صفحه یا پنجره را محاسبه کنند و سپس نتایج را در پیشنمایش دوربین اعمال کنند. برای راهنمایی دقیق، پیشنمایش دوربین و معرفی نمایاب دوربین را ببینید.

پیشنمایش دوربین در همه جهتهای دستگاه به درستی تراز و مقیاس شده است.
راه حل سازگاری
هنگامی که 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های مشاهده سوء استفاده:

API منسوخ شده محدودیت های برنامه را اشتباه محاسبه می کند. محتوای برنامه از صفحه خارج می شود.
بهینه سازی
هرگز برای تعیین موقعیت عناصر UI به اندازه نمایشگر فیزیکی اعتماد نکنید. برنامه خود را به APIهای مبتنی بر WindowMetrics
منتقل کنید، از جمله APIهای WindowManager
زیر:
پلتفرم:
جت پک:

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
، میتواند شامل سبکهایی باشد که فعالیتها را شفاف میکند.
فعالیتهای شفاف تمام فضای نمایش موجود را پوشش نمیدهند، که مدیریت آنها را دشوار میکند زیرا ناحیه نمایش موجود میتواند بر اساس تغییرات پیکربندی مانند چرخش دستگاه، تا کردن و باز کردن دستگاه، و حالت چند پنجرهای تغییر کند.
موضوع
یک فعالیت شفاف باید با مرزهای اولین فعالیت مات زیر فعالیت شفاف در پشته فعالیت وظیفه مطابقت داشته باشد. با این حال، یک فعالیت غیر شفاف که یک گفتگوی مجوز را راه اندازی می کند، می تواند یک ترامپولین باشد (فعالیتی که فعالیت دیگری را راه اندازی می کند و سپس ناپدید می شود). و بنابراین، سیستم نمی تواند محدوده فعالیت ترامپلاین را که فعالیت گفتگوی مجوز شفاف را راه اندازی کرده است، تعیین کند.

دیالوگ به دلیل اینکه فعالیت از یک ترامپولین راه اندازی شده بود، به درستی انجام نشد.
بهینه سازی
فعالیتهای شفاف محدودیتهای خود را از مبهمترین فعالیتهای زیر خود در پشته فعالیت یک کار به ارث میبرند. فعالیت غیر شفاف باید برای کل چرخه حیات فعالیت شفاف، از ایجاد فعالیت تا تخریب، در دسترس باشد. به همین دلیل، درخواست های مجوز از فعالیت های ترامپولین را راه اندازی نکنید.
اگر یک فعالیت ترامپلاین یک درخواست مجوز راه اندازی کند، ممکن است کاربر نتواند گفتگوی مجوز را ببیند زیرا فعالیت ترامپلاین قبل از اینکه کاربر فرصتی برای پاسخ دادن به گفتگو داشته باشد از بین می رود و ممکن است ابعاد و موقعیت فعالیت گفتگو به اشتباه محاسبه شده باشد.
برنامهها همیشه باید درخواستهای مجوز را از فعالیتهایی راهاندازی کنند که تا زمانی که کاربر تصمیمی برای مجوز بگیرد، قابل مشاهده باقی میمانند.
گوشه های گرد
یک فعالیت می تواند به دلیل سبکی که شفافیت پس زمینه را مشخص می کند یا به دلیل اینکه محتوای فعالیت فضای نمایش موجود را پر نمی کند شفاف باشد. اگر یک فعالیت شفاف فضای نمایش موجود را پر کند، سیستم به طور خودکار گوشه های گرد را در زمانی که سازنده دستگاه برای انجام این کار پیکربندی می کند، اعمال می کند. اما، اگر یک فعالیت شفاف (مانند گفتگوی مجوز) فضای موجود را پر نمی کند، این شما هستید که تصمیم می گیرید گوشه های گرد را اعمال کنید یا نه.
گفتگوهای مجوز فضای نمایش موجود را پر نمی کنند زیرا طرح گفتگو معمولاً به جای LayoutParams.MATCH_PARENT از LayoutParams.WRAP_CONTENT استفاده می کند.

گفتگو با گوشه های گرد که به درستی روی فعالیت راه اندازی قابل مشاهده قرار گرفته اند.
راه حل سازگاری
فعالیت هایی که فعالیت های گفتگو را راه اندازی می کنند تا زمانی که کاربر به گفتگو پاسخ ندهد قابل مشاهده نگه دارید.
این سیستم تضمین میکند که یک فعالیت شفاف تمام محدودیتها را از اولین فعالیت غیرشفاف در زیر فعالیت شفاف در پشته فعالیت به ارث میبرد، از جمله محدودیتهای مربوط به:
- حالت سازگاری با اندازه
- جهت گیری
- نسبت تصویر
بازی های یونیتی
بازیهای یونیتی روی تمام صفحه اندروید یا در حالت چند پنجرهای اجرا میشوند. با این حال، وقتی برنامه در حالت چند پنجره ای قرار می گیرد، بسیاری از بازی های یونیتی تمرکز خود را از دست می دهند و طراحی محتوا متوقف می شود.
موضوع
یونیتی برای پشتیبانی از حالت چند پنجره ای در اندروید، یک گزینه Resizable Window
در Unity 2019.4 اضافه کرد. با این حال، پیادهسازی اولیه به چرخه حیات فعالیت در حالت چند پنجرهای به درستی واکنش نشان نداد و باعث شد وقتی برنامه تمرکز خود را از دست داد، UnityPlayer پخش را متوقف کند. بازیکن یک صفحه سیاه یا آخرین فریم ثابت بازی را ارائه کرد. بازی فقط زمانی از سر گرفته میشد که کاربر روی صفحه ضربه میزد. بسیاری از برنامههایی که از موتور Unity استفاده میکنند با این مشکل مواجه هستند و در حالت چند پنجرهای بهعنوان یک پنجره سیاه رندر میشوند.

بازی در حالت چند پنجره ای تمرکز خود را از دست می دهد و به صورت یک پنجره سیاه رندر می شود.
بهینه سازی
Unity را به 2019.4.40 یا جدیدتر ارتقا دهید و بازی خود را دوباره صادر کنید. گزینه Resizable Window
را در تنظیمات Player Android علامت بزنید، در غیر این صورت، زمانی که بازی در فوکوس نیست، حتی اگر بازی کاملاً در حالت چند پنجره ای قابل مشاهده باشد، بازی متوقف می شود.

بازی محتوا را در حالت چند پنجره ای به درستی رندر می کند حتی زمانی که در فوکوس نیست.
راه حل سازگاری
سازندگان دستگاه میتوانند OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
برای هر برنامه لغو کنند تا یک رویداد فوکوس جعلی را برای یک برنامه در حالت چند پنجرهای ارائه کنند. لغو به فعالیت امکان می دهد محتوا را دوباره ترسیم کند و سیاه نشود.
برنامه خود را برای مشکلات سازگاری آزمایش کنید
برای آزمایش برنامه خود و درک نحوه عملکرد آن در فاکتورهای مختلف، از منابع زیر استفاده کنید:
- پخش جریانی دستگاه: برای آزمایش برنامهتان در دستگاههای تولیدی (از جمله دستگاههای مرجع ) که در مراکز داده Google میزبانی میشوند، به پخش جریانی دستگاه Android، ارائهشده توسط Firebase مراجعه کنید.
- شبیه سازها در Android Studio Hedgehog: برای اطلاعات در مورد ایجاد شبیه ساز برای دستگاه های مرجع، به ایجاد و مدیریت دستگاه های مجازی مراجعه کنید.
- شبیه ساز قابل تغییر اندازه اندروید استودیو: برای اطلاعات در مورد دسترسی به دستگاه های مجازی، به اجرای برنامه ها در شبیه ساز Android مراجعه کنید.
صندوق دار است
بررسی کنید که هر فعالیتی بتواند از تمام فضای نمایش در دسترس برنامه استفاده کند. ابتدا کد زیر را در پوشه تست خود اعلام کنید:
کاتلین
fun isLetterboxed(activity: AppCompatActivity): Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
جاوا
public boolean isLetterboxed(AppCompatActivity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds(); Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
سپس آزمایشی را برای اثبات رفتار اجرا کنید و مطمئن شوید که فعالیت هدف در جعبه نامه نیست:
کاتلین
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertFalse(it.isLetterboxed()) } }
جاوا
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); @Test public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity( activity -> { assertFalse(isLetterboxed(activity)); }); } }
در حالت ایدهآل، این نوع آزمایش را فقط تا زمانی اجرا کنید که موفق شود و ثابت کند که فعالیتهای برنامه شما کل فضای نمایشی موجود در برنامه را اشغال میکند. برنامه خود را روی همه انواع دستگاه آزمایش کنید تا از رفتار ثابت اطمینان حاصل کنید.
لغو هر برنامه
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_SMALL | 349045028 | حداقل نسبت تصویر را به 4:3 تغییر می دهد. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | حداقل نسبت تصویر را به 3:2 تغییر می دهد. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | حداقل نسبت تصویر را به 16:9 تغییر می دهد. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | حداقل نسبت تصویر را به تناسب 50 درصد اندازه صفحه نمایش (یا نسبت تصویر تقسیم صفحه) تغییر می دهد. | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | نادیده گرفتن حداقل نسبت تصویر را غیرفعال می کند تا وقتی دستگاه به صورت عمودی است، برنامه ها تمام صفحه باشند. | |
جهت گیری | OVERRIDE_ANY_ORIENTATION | 265464455 | نادیده گرفتن هر جهتی را فعال می کند. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | جهت گیری، قابلیت تغییر اندازه و محدودیت های نسبت تصویر را نادیده می گیرد. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | زمانی که یک فعالیت جهت گیری نامشخصی دارد، جهت عمودی بودن را لغو می کند. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | هنگامی که یک فعالیت جهت گیری نامشخصی دارد، جهت گیری nosensor بودن (استفاده از جهت گیری طبیعی دستگاه) را لغو می کند. | |
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | برنامه های فقط افقی را 180 درجه می چرخاند. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | محدوده نادیده گرفتن جهت را به زمانی که برنامه به دوربین متصل است محدود می کند. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | هنگامی که یک کار تمام صفحه است (از جمله زمانی که جعبه نامه) نمایشگر را روی جهت طبیعی افقی ثابت تنظیم می کند. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | برای جلوگیری از چرخش حلقههای بینهایت، درخواستهای جهتگیری از برنامه را نادیده میگیرد. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | درخواستهای جهتگیری مکرر را هنگام راهاندازی مجدد یک فعالیت نادیده میگیرد. اگر Android تشخیص دهد که یک برنامه حداقل دو جهت جدید را در عرض یک ثانیه درخواست می کند، سیستم این را یک چرخش بی نهایت در نظر می گیرد و لغو را اعمال می کند. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | با غیرفعال کردن تنظیم درخواست جهت نادیده گرفتن سازنده دستگاه از ارسال نامه جلوگیری می کند. | |
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
تنظیم کنید.
نحوه بهینه سازی اپلیکیشن ها
از طرحبندیهای واکنشگرا/تطبیقی برای فعال کردن برنامهها برای سازگاری با اندازههای نمایشگر و نسبتهای ابعادی استفاده کنید. به پشتیبانی از اندازه های مختلف نمایشگر مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از لغو
پرچم ویژگی PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
را روی false
تنظیم کنید.
پرچم های دارایی برای تنظیم نادیده گرفتن
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
دستورات adb برای تست لغو
برای اعمال لغو و تغییر اندازه برنامه:
adb shell am compat enable FORCE_RESIZE_APP <package>
برای حذف لغو:
adb shell am compat disable FORCE_RESIZE_APP <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
FORCE_NON_RESIZE_APP
بسته هایی را که نادیده گرفتن برای آنها اعمال می شود مجبور می کند قابل تغییر اندازه نباشند و در صورت تغییرات پیکربندی وارد حالت سازگاری اندازه شوند. برای تمام اندازه های نمایشگر اعمال می شود.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
هم ویژگی android:resizeableActivity
و هم پرچم ابرداده android.supports_size_changes
را در مانیفست برنامه روی false
تنظیم کنید و یک جهت یا نسبت ابعاد را محدود کنید.
نحوه بهینه سازی اپلیکیشن ها
همه برنامههایی که در صورت تغییر اندازه رفتار خوبی دارند، باید android:resizeableActivity
یا android.supports_size_changes
روی true
تنظیم شده باشند. سایر برنامه ها باید بهبود یابند تا در صورت تغییر اندازه رفتار خوبی داشته باشند. android:resizeableActivity را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
پرچم ویژگی PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
را روی false
تنظیم کنید.
پرچم های دارایی برای تنظیم نادیده گرفتن
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
دستورات adb برای تست لغو
برای اعمال لغو و غیرقابل تغییر اندازه کردن برنامه:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
برای حذف لغو:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_MIN_ASPECT_RATIO
دروازهبان برای همه موارد لغو که حداقل نسبت ابعاد معین را مجبور میکنند.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
android:minAspectRatio
در سطح فعالیت یا برنامه تنظیم کنید.
نحوه بهینه سازی اپلیکیشن ها
در برنامه خود محدودیت های نسبت تصویر قرار ندهید. مطمئن شوید که برنامه شما از اندازه های مختلف نمایشگر پشتیبانی می کند . از کلاس های اندازه پنجره برای پشتیبانی از طرح بندی های مختلف بر اساس میزان فضایی که برنامه شما روی صفحه دارد استفاده کنید. Compose WindowSizeClass
API و مشاهده 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_SMALL
حداقل نسبت ابعاد فعالیت را روی یک مقدار کوچک (4:3) تنظیم می کند.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینه سازی اپلیکیشن ها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچم های دارایی برای تنظیم نادیده گرفتن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
دستورات adb برای تست لغو
برای اعمال لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>
برای حذف لغو:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
حداقل نسبت ابعاد فعالیت را روی یک مقدار متوسط (3:2) تنظیم می کند.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینه سازی اپلیکیشن ها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچم های دارایی برای تنظیم نادیده گرفتن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
دستورات adb برای تست لغو
برای اعمال لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
برای حذف لغو:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
حداقل نسبت ابعاد فعالیت را روی یک مقدار بزرگ (16:9) تنظیم می کند.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینه سازی اپلیکیشن ها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچم های دارایی برای تنظیم نادیده گرفتن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
دستورات adb برای تست لغو
برای اعمال لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
برای حذف لغو:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
استفاده از نسبت تصویر تقسیم صفحه را فعال می کند. به یک برنامه اجازه می دهد تا از تمام فضای موجود در حالت تقسیم صفحه استفاده کند و از جعبه نامه پرهیز کند.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینه سازی اپلیکیشن ها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچم های دارایی برای تنظیم نادیده گرفتن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
دستورات adb برای تست لغو
برای اعمال لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
برای حذف لغو:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
برای استفاده از تمام فضای موجود صفحه نمایش، حداقل نادیده گرفتن نسبت تصویر را در حالت تمام صفحه پرتره غیرفعال می کند.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینه سازی اپلیکیشن ها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچم های دارایی برای تنظیم نادیده گرفتن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
دستورات adb برای تست لغو
برای اعمال لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
برای حذف لغو:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_ANY_ORIENTATION
موارد زیر را برای نادیده گرفتن هر جهتی فعال می کند:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
ویژگی مانیفست activity:screenOrientation
تنظیم کنید یا از 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_ANY_ORIENTATION_TO_USER
برنامه را فعال می کند تا فضای نمایش موجود را پر کند. محدودیتهای جهتگیری، قابلیت تغییر اندازه و نسبت ابعاد مشخص شده در مانیفست برنامه را لغو میکند. همچنین هر گونه تماس با Activity#setRequestedOrientation()
را نادیده می گیرد.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
ویژگی مانیفست
android:screenOrientation
را تنظیم نکنید یا ویژگی را روی"user"
تنظیم نکنید.ویژگی
android:resizeableActivity
مانیفست را رویtrue
تنظیم کنید.در صفحههای کوچک، برای پشتیبانی از تغییر اندازه برنامه و غیرفعال کردن حالت چند پنجرهای با
android:resizeableActivity=false
، پرچم ابردادهandroid.supports_size_changes
را رویtrue
تنظیم کنید.minAspectRatio
وmaxAspectRatio
را تنظیم نکنید .
نحوه بهینه سازی اپلیکیشن ها
برنامه خود را فعال کنید تا از همه جهت ها پشتیبانی کند. در مانیفست برنامه خود یک مشخصه screenOrientation
تنظیم نکنید. با تنظیم ویژگی android:resizeableActivity
در مانیفست برنامه خود روی true
از قابلیت تغییر اندازه برنامه، حالت چند پنجرهای و همه نسبتهای صفحه نمایش پشتیبانی کنید. به پشتیبانی از اندازه های مختلف نمایشگر مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از لغو
OVERRIDE_ANY_ORIENTATION
را ببینید.
پرچم های دارایی برای تنظیم نادیده گرفتن
OVERRIDE_ANY_ORIENTATION
را ببینید.
دستورات adb برای تست لغو
برای اعمال لغو:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
برای حذف لغو:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
جهت گیری عمودی را برای تمام فعالیت های بسته فعال می کند. مگر اینکه OVERRIDE_ANY_ORIENTATION فعال باشد، لغو فقط زمانی استفاده می شود که هیچ جهت ثابت دیگری توسط فعالیت مشخص نشده باشد.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
OVERRIDE_ANY_ORIENTATION
را ببینید.
نحوه بهینه سازی اپلیکیشن ها
OVERRIDE_ANY_ORIENTATION
را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
OVERRIDE_ANY_ORIENTATION
را ببینید.
پرچم های دارایی برای تنظیم نادیده گرفتن
OVERRIDE_ANY_ORIENTATION
را ببینید.
دستورات adb برای تست لغو
برای اعمال لغو:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
برای حذف لغو:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
جهت گیری دماغه را برای تمام فعالیت های بسته فعال می کند. مگر اینکه OVERRIDE_ANY_ORIENTATION فعال باشد، لغو فقط زمانی استفاده می شود که هیچ جهت ثابت دیگری توسط فعالیت مشخص نشده باشد.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
OVERRIDE_ANY_ORIENTATION
را ببینید.
نحوه بهینه سازی اپلیکیشن ها
OVERRIDE_ANY_ORIENTATION
را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
OVERRIDE_ANY_ORIENTATION
را ببینید.
پرچم های دارایی برای تنظیم نادیده گرفتن
OVERRIDE_ANY_ORIENTATION
را ببینید.
دستورات adb برای تست لغو
برای اعمال لغو:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
برای حذف لغو:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
جهت گیری معکوس 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
را ببینید.
نحوه غیرفعال کردن یا انصراف از لغو
بدون انصراف در صورتی که برنامه با دستگاهی سازگار نباشد که سازنده دستگاه تنظیم درخواست جهت را نادیده بگیرد، غیرفعال کردن آن می تواند خطرناک باشد. برای غیرفعال کردن لغو، با روابط توسعهدهنده اندروید تماس بگیرید.
پرچم های دارایی برای تنظیم نادیده گرفتن
هیچ پرچم خاصی برای این لغو وجود ندارد.
دستورات 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
API برای فعالیت حالت سازگاری با جعبه نامه یا اندازه استفاده نکنند. Display
API ها همچنان محدوده های ناحیه نمایش را ارائه می دهند.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
فعالیتها را با تنظیم مشخصه مانیفست android:resizeableActivity
روی true
یا پرچم ابرداده android.supports_size_changes
به true
اعلام کنید.
نحوه بهینه سازی اپلیکیشن ها
برنامههایی که اعلام میکنند کاملاً قابل تغییر اندازه هستند، هرگز نباید به اندازه نمایشگر برای قرار دادن عناصر رابط کاربری متکی باشند. برنامه خود را به APIهای بهروزی که WindowMetrics
ارائه میدهند، منتقل کنید. اگر از Jetpack Compose استفاده میکنید، از API WindowSizeClass
برای ترسیم رابط کاربری بر اساس سطح صفحه نمایش برنامه در نمایشگر فعلی استفاده کنید. به استفاده از کلاس های اندازه پنجره مراجعه کنید.
نحوه غیرفعال کردن یا انصراف از لغو
بدون انصراف از APIهای منسوخ مهاجرت کنید.
پرچم های دارایی برای تنظیم نادیده گرفتن
هیچ پرچم خاصی برای این لغو وجود ندارد.
دستورات 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
API را بدون در نظر گرفتن حالت پنجره اعمال کنند. Display
API همیشه محدوده برنامه را ارائه می کند.
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
با تنظیم ویژگی android:resizeableActivity
روی false
یا android.supports_size_changes
پرچم ابرداده را روی false
، فعالیتها را غیرقابل تغییر اندازه اعلام کنید.
نحوه بهینه سازی اپلیکیشن ها
برنامههایی که اعلام میکنند کاملاً قابل تغییر اندازه هستند، هرگز نباید به اندازه نمایشگر برای قرار دادن عناصر رابط کاربری متکی باشند. برنامه خود را از APIهای منسوخ به APIهای به روزی که 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_SANDBOX_VIEW_BOUNDS_APIS
بستهها را وادار میکند تا View
APIهای زیر را به جعبههای سندباکس در محدوده فعالیت قرار دهند:
چگونه برنامهها میتوانند به همان نتیجهای که نادیده گرفته میشوند، برسند
مشکل را در کد برنامه با استفاده از API هایی حل کنید که کران های پنجره برنامه و افست های مربوط به پنجره برنامه را به جای محدوده های نمایش دستگاه و آفست های مربوط به نمایشگر دستگاه ارائه می دهند.
نحوه بهینه سازی اپلیکیشن ها
برنامهها باید از View
API استفاده کنند، با در نظر گرفتن امکان ارسال نامه و حالت چند پنجرهای در برنامه. به 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، API سطح 34، با createScreenCaptureIntent()
)، که به کاربران امکان میدهد بدون در نظر گرفتن حالت پنجره، تصمیم بگیرند که آیا تمام صفحه یا یک پنجره برنامه را به اشتراک بگذارند. یا با یک آرگومان MediaProjectionConfig
که از فراخوانی به createConfigForUserChoice()
بازگردانده شده است، createScreenCaptureIntent(MediaProjectionConfig)
فراخوانی کنید.
نحوه بهینه سازی اپلیکیشن ها
به کاربران اجازه دهید انتخاب کنند که آیا کل صفحه نمایش دستگاه یا یک پنجره برنامه را در طول نمایش رسانه به اشتراک بگذارند، که از 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 یا جدیدتر ارتقا دهید و بازی خود را دوباره صادر کنید. در تنظیمات Android Player گزینه Resizable Window
علامت زده نگه دارید.
نحوه غیرفعال کردن یا انصراف از لغو
پرچم ویژگی 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>
توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.
منابع اضافی
- دستورالعمل های کیفیت برنامه صفحه نمایش بزرگ
- دستورالعمل های اصلی کیفیت برنامه