Android برای برنامههایی که محدودیتهای چرخش یا تغییر اندازه را اعلام میکنند، حالت سازگاری را فعال میکند. حالت سازگاری رفتار قابلقبول برنامه را در دستگاههای دارای صفحهنمایش بزرگ، تلفنهای تاشو، و محیطهای رایانه تضمین میکند اما کارایی آن در سطح مطلوب نیست.
لغوهای هر برنامه به سازندگان دستگاه، مالکان دستگاه مجازی۱، و کاربران امکان میدهد رفتار برنامه را تغییر دهند تا چیدمان برنامه بهبود یابد یا از خراب شدن برنامهها در دستگاههای منتخب جلوگیری شود.
Android 16
Android 16 (سطح API 36) محدودیتهای جهت صفحهنمایش، نسبت ابعادی، و قابلیت تغییر اندازه برنامه را نادیده میگیرد تا چیدمان برنامهها در عوامل شکل با کمترین عرض >= ۶۰۰ پیکسل مستقل از تراکم را بهبود دهد.
کنارگذاریهای زیر برای هر برنامه برای برنامههایی که سطح میانای برنامهسازی کاربردی ۳۶ را هدفیابی میکنند غیرفعال است:
- FORCE_RESIZE_APP
- FORCE_NON_RESIZE_APP
- OVERRIDE_MIN_ASPECT_RATIO
- OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
- OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
- OVERRIDE_MIN_ASPECT_RATIO_LARGE
- OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
- OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
- OVERRIDE_ANY_ORIENTATION
- OVERRIDE_ANY_ORIENTATION_TO_USER
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
- OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
- OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
- OVERRIDE_RESPECT_REQUESTED_ORIENTATION
- OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
انصراف
برنامه شما میتواند سطح API 36 را هدفیابی کند اما از عملکرد Android 16 انصراف دهد، در این صورت OVERRIDE_ANY_ORIENTATION_TO_USER قابل اعمال نیست.
اعلام کردن دارایی مانیفست
برای انصراف از رفتار API سطح ۳۶، ویژگی مانیفست PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY را اعلان کنید.
برای انصراف از یک فعالیت خاص، ویژگی را در عنصر <activity> تنظیم کنید:
<activity ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</activity>
برای لغو کل برنامه، ویژگی را در عنصر <application> تنظیم کنید:
<application ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</application>
اگر برنامه شما اندروید ۱۶ (سطح API ۳۶) یا بالاتر را هدف قرار میدهد، این ویژگی جهت نمایش را قفل نمیکند یا از چرخش صفحه در نمایشگرهای بزرگ جلوگیری نمیکند .
دستگاههای مرجع
دستگاههای زیر ممکن است بهدلیل پیکربندیهای غیرمعمول یا پیکربندیهایی که برنامهها بهخوبی از آنها پشتیبانی نمیکنند به ملغی کردن تنظیمات برای هر برنامه نیاز داشته باشند:
- رایانههای لوحی: جهت طبیعی برخیاز رایانههای لوحی، مثل Pixel Tablet،
افقی است. وقتی
Display#getRotation()برمیگردد، دستگاه در جهت طبیعی خود قرار داردSurface.ROTATION_0. اگر برنامهها فرض کنندROTATION_0عمودی است، چیدمانهای برنامه و پیشنمایش دوربین ممکن است با نمایشگر دستگاه مطابقت نداشته باشد. - دستگاههای تاشو افقی: برخیاز دستگاههای تاشو، مانند Pixel Fold، در حالت تاشده عمودی هستند، اما در حالت بازشده افقی هستند. اگر برنامهها فرض کنند که جهت بازشده عمودی است، احتمالاً حلقههای لرزان یا مشکلات چیدمان رخ میدهد.
- تلفنهای تاشو: تلفنهای تاشو بازشده معمولاً در جهت عمودی قرار میگیرند. اما وقتی تا میشوند، تلفنها معمولاً نمایشگر کوچکی در جهت افقی دارند. برنامهها باید جهتهای مختلف نمایشگرها را شناسایی و با آنها سازگار شوند.
- نمایشگرهای خارجی: دستگاههای منتخب میتوانند جلسه پنجرهبندی رایانهای را در نمایشگرهای خارجی متصل شروع کنند. برنامهها باید نمایشگرهای خارجی را برای دریافت اطلاعاتی مثل اندازه و وضوح صفحهنمایش پُرسمان کنند؛ درغیراینصورت، برنامهها ممکن است درباره نمایشگرها فرضیههای نادرستی داشته باشند که میتواند منجر به عملکرد نادرست برنامه شود.
- نمایشگرهای خودرو: بسیاری از نمایشگرهای خودرو، اما نه همه آنها، افقی هستند. توسعه برنامههای پارکشده برای نمایشگرهای خودرو مشابه توسعه برای رایانههای لوحی است.
مشکلات رایج سازگاری
برنامهها اغلب بهدلیل محدودیتهای جهت برنامه، محدودیتهای قابلیت تغییر اندازه و نسبت ابعادی، مدیریت نادرست جهت پیشنمایش دوربین، و استفاده نادرست از میاناهای برنامهسازی کاربردی با مشکلات سازگاری مواجه میشوند.
لترباکسینگ
«حاشیهگذاری» برنامه را در مرکز صفحه یا، در صفحهنمایشهای بزرگ، در یک طرف یا طرف دیگر برای دسترسی آسان قرار میدهد. ماتها (نوارهای تکرنگ یا کاغذدیواری محو) فضای نمایش استفادهنشده در کنارهها یا بالا و پایین برنامه را پر میکنند.
حاشیهگذاری اغلب در دستگاههای دارای صفحهنمایش بزرگ اتفاق میافتد زیرا ابعاد و نسبت ابعادی نمایشگر دستگاه معمولاً با ابعاد و نسبت ابعادی تلفنهای استاندارد که اکثر برنامهها برای آنها طراحی شدهاند متفاوت است.
شکل ۱. برنامهای که به جهت عمودی محدود شده است در رایانه لوحی افقی و تاشو دارای حاشیه سیاه است.
مشکل
برنامه از همه پیکربندیهای نمایشگر پشتیبانی نمیکند زیرا برنامه دارای جهت ثابت، نسبت ابعادی ثابت، یا قابلیت تغییر اندازه نیست.
تنظیمات پیکربندی که جهت و قابلیت تغییر اندازه برنامه را کنترل میکنند شامل موارد زیر میشود:
screenOrientation: جهت ثابتی را برای برنامه مشخص میکند. برنامهها همچنین میتوانند جهت را در زمان اجرا بااستفاده ازActivity#setRequestedOrientation()تنظیم کنند.resizeableActivity: نشان میدهد که آیا سیستم میتواند اندازه برنامهها را تغییر دهد تا در پنجرههایی با ابعاد مختلف جا شوند. در Android 11 (سطح میانای برنامهسازی کاربردی ۳۰) و پایینتر، مشخص میکند که آیا برنامهها از حالت چندپنجرهای پشتیبانی میکنند یا نه. در Android 12 (سطح API 31) و بالاتر، مشخص میکند که آیا برنامهها از حالت چندپنجرهای در صفحههای کوچک (اندازه کلاس پنجره فشرده) پشتیبانی میکنند یا نه. در Android 12 و نسخههای بالاتر، برنامهها از حالت چندپنجرهای در صفحهنمایشهای بزرگ (کلاس اندازه پنجره متوسط یا گسترده) بدون توجه به این تنظیم پشتیبانی میکنند.maxAspectRatio: حداکثر نسبت ابعادی را که برنامه پشتیبانی میکند مشخص میکند. فقط برنامههایی کهresizeableActivityرویfalseتنظیم شده است میتوانندmaxAspectRatioرا تنظیم کنند.minAspectRatio: حداقل نسبت ابعادی پشتیبانیشده توسط برنامه را مشخص میکند. فقط برنامههایی کهresizeableActivityرویfalseتنظیم شده است میتوانندminAspectRatioرا تنظیم کنند.
برنامه به جهت عمودی محدود شده است و در دستگاه افقی قابلاستفاده نیست.
بهینهسازی
برنامه باید از همه دستگاهها و حالت چندپنجرهای و جهتها و اندازههای نمایشگر پشتیبانی کند. همه محدودیتهای جهت و نسبت ابعادی ثابت را از چیدمانهای برنامه و فایل مانیفست برنامه بردارید.
برنامه از همه جهتگیریهای دستگاه پشتیبانی میکند.
راهکار موقت سازگاری
اگر برنامهای با گرایش ثابت یا نسبت ابعادی ثابت در پنجرهای اجرا شود که برنامه مستقیماً از اندازه یا گرایش پنجره پشتیبانی نمیکند، Android برنامه را قاببندی میکند تا پیوستگی حفظ شود.
از Android 12 (میانای برنامه کاربردی سطح ۳۱) شروع میشود و با 12L (میانای برنامه کاربردی سطح ۳۲) ادامه مییابد، پلاتفرم بهبودهای متنوعی را برای برنامههای دارای قاب اعمال میکند. تولیدکنندگان دستگاه بهبودهای واسط کاربر را پیادهسازی میکنند. برای اینکه برنامهتان از این بهبودها بهرهمند شود، نیازی نیست توسعه اضافی انجام دهید.
Android 12 (سطح API 31) بهبودهای زیباییشناختی زیر را معرفی میکند که توسط سازندگان دستگاه قابل پیکربندی است:
- گوشههای گرد: گوشههای پنجره برنامه ظاهری پالایششدهتر دارند.
- شفافیت نوار سیستم: نوارهای وضعیت و پیمایش که روی برنامه رونهاد میشوند نیمهشفاف هستند و باعث میشوند نمادهای روی نوارها همیشه روی پسزمینه نامه قابلمشاهده باشند.
- نسبت ابعادی پیکربندیشدنی: نسبت ابعادی برنامه را میتوان برای بهبود ظاهر برنامه تنظیم کرد.
شکل ۲. برنامه با قاببندی نامه و بهبودهای واسط کاربر.
12L (سطح میانای برنامهسازی کاربردی ۳۲) بهبودهای عملکردی زیر را اضافه میکند:
موقعیتیابی پیکربندیپذیر: در صفحهنمایشهای بزرگ، سازندگان دستگاه میتوانند برنامه را در سمت چپ یا راست نمایشگر قرار دهند و تعامل را آسانتر کنند.
دکمه بازراهاندازی بازطراحیشده: سازندگان دستگاه میتوانند به دکمه بازراهاندازی برای حالت سازگاری اندازه ظاهر جدیدی بدهند تا کاربران بهتر آن را تشخیص دهند.
Android 13 (سطح میانای برنامهسازی کاربردی ۳۳) کادر گفتگوی آموزش کاربر درباره جایگذاری برنامه دارای حاشیه سیاه در صفحهنمایش یا گنجاندن حاشیه سیاه در حالت صفحه تقسیمشده اضافه میکند:
شکل ۳. برنامه با کادر گفتگوی آموزش کاربر.
حالت سازگاری اندازه
حالت سازگاری اندازه عبارت است از افزودن حاشیه که نسبت ابعادی برنامه را حفظ میکند و شامل کنترل بازراهاندازی میشود. این کنترل به کاربران امکان میدهد برنامه را بازراهاندازی کنند و نمایشگر را دوباره بکشند. Android حالت سازگاری اندازه را برای برنامههایی که تغییر اندازه نمیدهند فرا میخواند. وقتی فعالیتی به یک محتوی نمایشگر ناسازگار با ابعاد فعالیت منتقل میشود، سیستم ممکن است برنامه را مجدداً مقیاسبندی کند تا نمایشگر دستگاه را حداقل در یک بُعد پر کند.
تغییرات پیکربندی دستگاه که میتواند باعث فعال شدن حالت سازگاری اندازه شود شامل موارد زیر است:
- چرخش دستگاه
- دستگاه تاشو درحال تا شدن یا باز شدن
- بین حالتهای نمایش تمامصفحه و صفحهٔ دونیمه جابهجا شوید
مشکل
حالت سازگاری اندازه معمولاً برای فعالیتهایی اعمال میشود که در جهت یا نسبت ابعادی محدود شدهاند و بهگونهای پیکربندی شدهاند (یا توسط سیستم تعیین شدهاند) که قابلیت تغییر اندازه ندارند.
اگر برنامه شما هریک از معیارهای زیر را داشته باشد، بهعنوان برنامه با قابلیت تغییر اندازه درنظر گرفته میشود و در حالت سازگاری با اندازه قرار نمیگیرد:
- با
resizeableActivity="true"قابل تغییر اندازه است - از حالت تصویردرتصویر (PIP) پشتیبانی میکند
- جاسازیشده است
- آیا ملغی کردن
FORCE_RESIZE_APPبرای هر برنامه توسط سازنده دستگاه اعمال شده است (ویژگیهای تنظیمشده توسط برنامه نادیده گرفته میشود)
اگر برنامه شما هیچیک از این شرایط را برآورده نکند، بهعنوان برنامه با قابلیت تغییر اندازه درنظر گرفته نمیشود و ممکن است در حالت سازگاری اندازه قرار گیرد.
برنامه غیرقابلتغییردادنی در حالت چندپنجرهای ازکار میافتد.
بهینهسازی
برنامه باید از همه اندازههای نمایشگر پشتیبانی کند. با تنظیم کردن مشخصه
android:resizeableActivity عنصر <activity>
یا <application> روی true در
مانیفست برنامه، برنامه را تغییرپذیر کنید. چیدمانهای تطبیقی/واکنشگرا برای برنامهتان طراحی کنید. برای
اطلاعات بیشتر، به
پشتیبانی از اندازههای مختلف نمایشگر و پشتیبانی از
حالت چند پنجرهای مراجعه کنید.
برنامه در همه اندازههای پنجره کار میکند.
راهکار موقت سازگاری
وقتی سیستم تشخیص دهد که نمایش برنامه دارای حاشیه سیاه با تغییر مقیاس برنامه برای پر کردن پنجره نمایشگر در حداقل یک بُعد بهبود مییابد، Android برنامه را در حالت سازگاری اندازه قرار میدهد. سیستم کنترل بازراهاندازی را نمایش میدهد که فرایند برنامه را بازسازی میکند، فعالیت را بازسازی میکند، و نمایشگر را دوباره رسم میکند. همچنین نمای کلی فرایندها و رشتهها را ببینید.
برنامه فقط عمودی در جهت افقی قاببندی شده است، با کنترل بازراهاندازی مجدداً مقیاسبندی شده است.
حالت سازگاری نمایشگر
حالت سازگاری نمایشگر از راهاندازی مجدد برنامه هنگام انتقال برنامه بین نمایشگرهای مختلف جلوگیری میکند. این انتقال میتواند باعث تغییر پیکربندی شود، مثلاً حالت رنگ، دسترسی به صفحه لمسی، یا تغییر تراکم صفحهنمایش.
حالت سازگاری نمایشگر بهطور پیشفرض برای بازیها (براساس پرچم
android:appCategory) فعال است تا پایداری و تداوم بهبود یابد.
برخلاف حالت سازگاری اندازه، حالت سازگاری نمایشگر پیکربندی برنامه را ثابت نمیکند. برنامه همچنان میتواند همه بهروزرسانیهای پیکربندی را ازطریق
واسطههای برنامهسازی کاربردی (API) مانند
onConfigurationChanged() دریافت کند اما از بازراهاندازی
مختلکننده معاف میشود. این یعنی بازیهایی که بهدرستی از APIهایی مثل
onConfigurationChanged() پشتیبانی میکنند، حتی اگر در حالت سازگاری نمایشگر باشند،
همچنان میتوانند واسط کاربر خود را بهصورت واکنشگرا بهروز کنند.
برای انصراف دادن از حالت سازگاری نمایشگر و مدیریت تغییرات پیکربندی در برنامه، پشتیبانی از تغییرات پیکربندی را در فایل AndroidManifest.xml برنامه اعلام کنید و تغییرات پیکربندی را در
onConfigurationChanged() مدیریت کنید.
<activity
android:name=".MyGameActivity"
android:configChanges="colorMode|touchscreen|density|...">
...
</activity>
حلقههای سوسوزننده
وقتی برنامهای از همه جهتهای نمایشگر پشتیبانی نمیکند، ممکن است هنگام تغییر پیکربندی، بارها جهتهای جدید را درخواست کند و یک حلقه بینهایت ایجاد کند که باعث سوسوزدن نمایشگر یا چرخش بیوقفه برنامه میشود.
مشکل
در 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()در روش فعالیتonCreate()تنظیم کنید زیرا درخواست جهت میتواند بهطور غیرمنتظرهای با تغییرات پیکربندی مدیریتنشده راهاندازی شود - جهت طبیعی دستگاه (
ROTATION_0) را عمودی درنظر بگیرید - جهت را براساس نشانهایی که با اندازه پنجره فعلی مرتبط نیستند تنظیم کنید، برای نمونه
Display#getRotation()، وجودFoldingFeature، یا میاناهای برنامهسازی کاربردی منسوخشده.
برنامه تغییر پیکربندی را مدیریت میکند، محدودیتهای گرایشی ندارد، بنابراین وارد حلقه چشمکزن نمیشود.
راهکار موقت سازگاری
Android در شرایط زیر تماسهای Activity#setRequestedOrientation() را نادیده میگیرد:
فعالیت قبلاً ازطریق تماس قبلی با روش مجدداً راهاندازی شده است یا درمان چرخش اجباری سازگاری دوربین فعال شده است (به پیشنمای دوربین در زیر مراجعه کنید).
سازندگان دستگاه میتوانند این رفتار را برای برنامهای با
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATIONاعمال کنند.فعالیت در یک ثانیه بیشاز دو درخواست جهتگیری داشته است که نشان میدهد حلقه رخ داده است. از بین دو درخواست در حلقه، Android از درخواستی استفاده میکند که ناحیه نمایش برنامه را به حداکثر میرساند.
سازندگان دستگاه میتوانند این رفتار را برای برنامهای با
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTEDاعمال کنند.مالکان دستگاه مجازی فراخوانی روش را در دستگاههای منتخب ملغی کردهاند.
پیشنمایش دوربین
پیشنمایش دوربین (یا منظرهیاب) برنامههای دوربین ممکن است در رایانههای لوحی، رایانههای کیفی، و نمایشگرهای تاشو همتراز نباشد یا تحریفشده باشد.
همچنین پیشنمایش دوربین در پنجرهبندی رایانه را ببینید.
مشکل
سند تعریف سازگاری Android بیان میکند که حسگر تصویر دوربین «باید بهگونهای جهتگیری شود که بُعد طولانی دوربین با بُعد طولانی صفحه تراز شود.»
برنامهها اغلب فرض میکنند که جهت دستگاه و جهت حسگر دوربین عمودی است—فرضی منطقی در تلفنهای همراه استاندارد. اما جهت طبیعی رایانههای لوحی و رایانههای کیفی و حسگرهای دوربین آنها میتواند افقی باشد. همچنین، عوامل شکل جدید مانند تاشوها میتوانند جهتهای طبیعی متعددی و حسگرهای دوربین متعددی با جهتهای متفاوت داشته باشند.
شروع فعالیت با جهتگیری دوربینی که برنامه انتظار ندارد یا جابهجایی بین دوربینهای مختلف یا صفحههای دستگاه (برای دستگاههای تاشو) میتواند باعث پیشنمایش دوربین ناهماهنگ یا تحریفشده شود.
پیشنمای دوربین در دستگاه تاشو با صفحهنمایش بزرگ نامنظم و تحریفشده است.
بهینهسازی
برنامههای دوربین باید جهت دستگاه و جهت حسگر دوربین را بهدرستی شناسایی و مدیریت کنند تا پیشنمایش دوربین را بهدرستی تراز و مقیاسبندی کنند. برنامهها باید چرخش دستگاه، چرخش حسگر، و نسبت ابعادی صفحهنمایش یا پنجره را محاسبه کنند و سپس نتایج را روی پیشنمایش دوربین اعمال کنند. برای راهنمایی دقیق، پیشنمایش دوربین و معرفی منظرهیاب دوربین را ببینید.
پیشنمایش دوربین در همه جهتهای دستگاه بهدرستی تراز و مقیاسبندی شده است.
راهکار موقت سازگاری
وقتی Display#getRotation()
Surface.ROTATION_0 را برمیگرداند، دستگاه در جهت طبیعی قرار دارد. سیستم از جهت طبیعی دستگاه محاسبه میکند
CameraCharacteristics.SENSOR_ORIENTATION
Android پنجره عمودی برنامههای
محدود به عمودی را با جهت طبیعی دستگاه تراز میکند، که
همان چیزی است که اکثر برنامهها انتظار دارند. وقتی جهت حسگر افقی باشد و پیشنمایش دوربین عمودی باشد، Android تصویر حسگر دوربین را نیز برش میدهد. راهکارهای ویژه شامل موارد زیر میشود:
چرخاندن اجباری پیشنمایشهای دوربین برای برنامههای محدود به حالت عمودی: برنامههای محدود به حالت عمودی انتظار دارند جهت طبیعی دستگاه و جهت حسگر دوربین عمودی باشد. بااینحال، در Android 12 (سطح میانای برنامهسازی کاربردی ۳۱) و نسخههای بالاتر، اگر سازندگان دستگاه مشخصات جهت را نادیده بگیرند، برنامهها میتوانند در جهتهای مختلف دستگاه اجرا شوند.
وقتی برنامه محدودشدهای در حالت عمودی به دوربین متصل میشود، Android بهاجبار برنامه را میچرخاند تا پنجره عمودی برنامه با جهت طبیعی دستگاه همراستا شود.
در برخیاز رایانههای لوحی (دستگاههای مرجع را ببینید)، پنجره عمودی برنامه به حالت تمامصفحه عمودی چرخانده میشود تا با جهت طبیعی دستگاه هماهنگ شود. برنامه پساز چرخش اجباری، کل صفحه را اشغال میکند.
رایانه لوحی — چرخش اجباری برنامه محدودشده به حالت عمودی.
در صفحه داخلی افقی تاشوها (دستگاههای مرجع را ببینید)، فعالیتهای فقط عمودی به افقی چرخانده میشوند تا با جهت طبیعی بازشده هماهنگ شوند. برنامه پساز چرخش اجباری دارای حاشیه سیاه میشود.
تاشو — چرخش اجباری برنامه محدودشده به حالت عمودی. برنامه همچنین دارای حاشیه سیاه است.
برش دوربین جلویی داخلی: حسگر دوربین جلویی داخلی در برخیاز تلفنهای تاشو در جهت افقی قرار دارد. علاوهبر چرخش اجباری پیشنمایش دوربین در نمایشگر داخلی تاشو، Android میدان دید دوربین جلویی داخلی (افقی) را برش میدهد تا حسگر نمایی مخالف جهتگیری دستگاه را ضبط کند.
بازآوری اجباری پیشنمایشهای دوربین: سیستم پساز چرخش اجباری، روشهای فعالیت
onStop()وonStart()(بهطور پیشفرض) یاonPause()وonResume()(اعمالشده توسط OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE لغو هر برنامه) را بهصورت چرخشی اجرا میکند تا مطمئن شود پیشنمایش دوربین بهدرستی نمایش داده میشود.مقیاسبندی نسبت ابعادی: سیستم بهصورت پویا نسبت ابعادی پیشنمایش دوربین چرخاندهشده اجباری را به حداقل نسبت ابعادی بالاتری تغییر میدهد که این امر تضمین میکند پیشنمایش دوربین بهدرستی مقیاسبندی شود.
اگر برنامهها پیشنمایش دوربین را بهدرستی مدیریت کنند، توسعهدهندگان برنامه میتوانند این راهکارهای موقت را ملغی کنند. جایگزینهای هر برنامه را ببینید.
میاناهای برنامهسازی کاربردی که معمولاً مورد سوءاستفاده قرار میگیرند
ازآنجاییکه Android از ویژگیهایی مثل حالت چندپنجرهای و دستگاههایی مثل دستگاههای تاشو پشتیبانی میکند، واسطهای برنامهسازی کاربردی قدیمی منسوخ شدهاند و با واسطهای برنامهسازی کاربردی بهروزی که برای همه اندازههای نمایشگر و عوامل شکل دستگاه کار میکنند جایگزین شدهاند. بااینحال، میاناهای برنامهسازی کاربردی منسوخشده همچنان برای سازگاری با نسخه قدیمی دردسترس هستند.
برخیاز View میاناهای برنامهسازی کاربردی برای اهداف خاصی طراحی شدهاند که توسعهدهندگان همیشه آنها را بهخوبی درک نمیکنند.
مشکل
توسعهدهندگان همچنان از میاناهای برنامهسازی کاربردی منسوخ Display استفاده میکنند و بهاشتباه تصور میکنند که میاناهای برنامهسازی کاربردی مرزهای برنامه را بهجای مرزهای ناحیه نمایشگر دستگاه برمیگردانند. یا توسعهدهندگان
بهاشتباه از میاناهای برنامهسازی کاربردی نمای ویژه برای دریافت سنجههای نمایش عمومی استفاده میکنند.
نتیجه این است که هنگام تغییر موقعیت عناصر واسط کاربر پساز رویدادهای تغییر اندازه پنجره برنامه، محاسبات اشتباه انجام میشود و باعث بروز مشکلات چیدمان میشود.
میاناهای برنامهسازی کاربردی «نمایش» منسوخشده و معمولاً مورد سوءاستفاده قرار میگیرند:
برای کسب اطلاعات بیشتر، پشتیبانی از حالت چندپنجرهای را ببینید.
میاناهای برنامهسازی کاربردی نمای سوءاستفادهشده:
میانای برنامهسازی کاربردی منسوخشده حدود برنامه را اشتباه محاسبه میکند. محتوای برنامه از صفحه خارج میشود.
بهینهسازی
هرگز برای جایگذاری عناصر میانای کاربر به اندازه نمایشگر فیزیکی تکیه نکنید. برنامهتان را به میاناهای برنامهسازی کاربردی مبتنی بر WindowMetrics، ازجمله میاناهای برنامهسازی کاربردی زیر، منتقل کنید:
WindowManager
پلتفورم:
Jetpack:
میانای برنامهسازی کاربردی سنجههای پنجره برنامه را بهدرستی محاسبه میکند.
راهکار موقت سازگاری
دو ملغیسازی میاناهای برنامهسازی کاربردی منسوخشده Display و میاناهای برنامهسازی کاربردی View را که بهاشتباه استفاده شدهاند تنظیم میکنند تا
محدودههای برنامه را برگردانند:
ALWAYS_SANDBOX_DISPLAY_APIS برای میاناهای برنامهسازی کاربردی Display؛ OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
برای میاناهای برنامهسازی کاربردی View. ALWAYS_SANDBOX_DISPLAY_APIS بهطور پیشفرض برای برنامههایی که واجدشرایط حالت سازگاری اندازه هستند نیز اعمال میشود.
فعالیتهای شفاف
فعالیتهای شفاف نتیجه سبکهای پسزمینه شفاف است، برای مثال:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
زمینههای مربوط به کادرهای گفتگو، مانند Theme.MaterialComponents.Dialog، میتوانند شامل سبکهایی باشند که فعالیتها را شفاف میکنند.
فعالیتهای شفاف همه فضای نمایشگر دردسترس را پوشش نمیدهند، که این امر مدیریت آنها را دشوار میکند زیرا ناحیه نمایشگر دردسترس میتواند براساس تغییرات پیکربندی مثل چرخش دستگاه، تا کردن و باز کردن دستگاه، و حالت چندپنجرهای تغییر کند.
مشکل
فعالیت شفاف باید با حدود اولین فعالیت مات زیر فعالیت شفاف در پشته فعالیت وظیفه مطابقت داشته باشد. بااینحال، فعالیت مبهمی که گفتگوی اجازه راهاندازی میکند میتواند ترامپولین باشد (فعالیتی که فعالیت دیگری راهاندازی میکند و سپس ناپدید میشود)؛ و بنابراین، سیستم نمیتواند حدود فعالیت ترامپولین را که فعالیت گفتگوی اجازه شفاف راهاندازی کرده است تعیین کند.
جایگاه کادر گفتگو اشتباه است زیرا فعالیت از ترامپولین راهاندازی شده است.
بهینهسازی
فعالیتهای شفاف محدودیتهای خود را از فعالیت مات بالایی که در پشته فعالیت تکلیف زیر آنها قرار دارد به ارث میبرند. فعالیت مات باید در کل چرخه حیات فعالیت شفاف، از ایجاد تا ازبین رفتن فعالیت، دردسترس باشد. به همین دلیل، درخواستهای اجازه را از فعالیتهای ترامپولین راهاندازی نکنید.
اگر فعالیت ترامپولین درخواست مجوز راهاندازی کند، ممکن است کاربر نتواند کادر گفتگوی مجوز را ببیند زیرا فعالیت ترامپولین قبلاز اینکه کاربر فرصت پاسخ دادن به کادر گفتگو را داشته باشد ازبین خواهد رفت و ابعاد و موقعیت فعالیت کادر گفتگو ممکن است بهاشتباه محاسبه شده باشد.
برنامهها باید درخواستهای اجازه را همیشه از فعالیتهایی که تا زمانی که کاربر تصمیم به اجازه بگیرد قابلمشاهده باقی میمانند راهاندازی کنند.
گوشههای گرد
فعالیت میتواند بهدلیل سبکی که شفافیت پسزمینه را مشخص میکند یا بهدلیل اینکه محتوای فعالیت فضای نمایش موجود را پر نمیکند شفاف باشد. اگر فعالیت شفافی فضای نمایشگر دردسترس را پر کند، سیستم بهطور خودکار گوشههای گرد را به فعالیت اعمال میکند، البته اگر سازنده دستگاه آن را پیکربندی کرده باشد. اما اگر فعالیت شفافی (مثل کادر گفتگوی اجازه) فضای دردسترس را پر نکند، تصمیم با شما است که گوشههای گرد را اعمال کنید یا نه.
فضای نمایشگر دردسترس با چارگوشهای اجازه پر نمیشود زیرا چیدمان چارگوش معمولاً از LayoutParams.WRAP_CONTENT بهجای LayoutParams.MATCH_PARENT استفاده میکند.
کادر گفتگو با گوشههای گرد بهدرستی روی فعالیت راهاندازی رؤیتپذیر قرار گرفته است.
راهکار موقت سازگاری
فعالیتهایی را که فعالیتهای کادر گفتگو را راهاندازی میکنند تا زمانی که کاربر به کادر گفتگو پاسخ دهد قابلمشاهده نگه دارید.
سیستم تضمین میکند که فعالیت شفاف همه محدودیتهای اولین فعالیت غیرشفاف زیر فعالیت شفاف در پشته فعالیت را بهارث میبرد، ازجمله محدودیتهای مربوط به:
- حالت سازگاری اندازه
- جهت
- نسبت ابعادی
بازیهای Unity
بازیهای Unity در حالت تمامصفحه Android یا در حالت چندپنجرهای اجرا میشوند. بااینحال، وقتی برنامه در حالت چندپنجرهای قرار میگیرد، بسیاری از بازیهای Unity تمرکز خود را ازدست میدهند و از کشیدن محتوا دست میکشند.
مشکل
Unity در Unity 2019.4 گزینه Resizable Window
را برای پشتیبانی از حالت چندپنجرهای در Android اضافه کرده است. بااینحال،
پیادهسازی اولیه بهدرستی به چرخه حیات فعالیت در
حالت چند پنجرهای واکنش نشان نمیداد و باعث میشد
وقتی برنامه تمرکز را ازدست میدهد، UnityPlayer پخش را معلق کند. بازیکن صفحه سیاه یا آخرین قاب منجمدشده بازی را ارائه کرد. تنها زمانی که کاربر روی صفحه تکضرب زد، بازی ازسر گرفته شد. بسیاری از برنامههایی که از موتور Unity استفاده میکنند با این مشکل مواجه هستند و
در حالت چندپنجرهای بهصورت پنجره سیاه رندر میشوند.
بازی در حالت چندپنجرهای تمرکز خود را ازدست میدهد و بهصورت پنجره سیاه پرداز میشود.
بهینهسازی
Unity را به نسخه 2019.4.40 یا جدیدتر ارتقا دهید و بازیتان را دوباره صادر کنید. گزینه
Resizable Window را در
تنظیمات پخشکننده Android علامتگذاری کنید، درغیراینصورت
بازی وقتی در کانون توجه نیست متوقف میشود، حتی اگر بازی بهطور کامل در
حالت چندپنجرهای قابلمشاهده باشد.
بازی محتوا را بهدرستی در حالت چندپنجرهای ارائه میکند، حتی زمانی که در کانون توجه نیست.
راهکار موقت سازگاری
سازندگان دستگاه میتوانند
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
لغو هر برنامه را اعمال کنند تا رویداد تمرکز جعلی را به برنامهای در
حالت چندپنجرهای ارائه دهند. ملغی کردن باعث میشود فعالیت محتوا را دوباره بکشد و
سیاه نشود.
پنجرهبندی رایانهای
وقتی برنامهها در محیط پنجرهبندی رایانهای اجرا میشوند، ممکن است با حالتهای سازگاری اضافی مواجه شوند.
اندازه برنامههایی که جهتگیری آنها قفل شده است بهراحتی قابلتغییر است. حتی اگر فعالیتی روی جهت عمودی قفل شده باشد، کاربران همچنان میتوانند اندازه برنامه را به جهت افقی تغییر دهند.
برنامههایی که جهتگیری قفلشده دارند همچنان میتوانند آزادانه تغییر اندازه دهند.
بااینحال، اگر فعالیتی بهعنوان غیرقابلتغییر اندازه اعلام شود (resizeableActivity = false)، رابط کاربری فعالیت با حفظ نسبت ابعادی یکسان مقیاسبندی میشود.
میانای کاربر فعالیتهایی که بهعنوان غیرقابل تغییر اندازه اعلام شدهاند مقیاسبندی میشود.
پیشنمای دوربین در پنجرهبندی رایانهای
وقتی برنامهای در پنجرهبندی رایانهای اجرا میشود، چرخش نمایشگر و جهت پنجره میتواند با آنچه در حالت تمامصفحه در تلفنهای استاندارد با آن مواجه میشود متفاوت باشد.
مشکل
برنامهها اغلب فرض میکنند که جهت دستگاه و جهت حسگر دوربین عمودی است، که میتواند منجر به عدم تراز یا تحریف پیشنمایش دوربین شود.
بهینهسازی
برنامههای دوربین باید جهت دستگاه و جهت حسگر دوربین را بهدرستی شناسایی و مدیریت کنند تا پیشنمایش دوربین را بهدرستی تراز و مقیاسبندی کنند. برنامهها باید چرخش دستگاه، چرخش حسگر، و نسبت ابعادی پنجره را محاسبه کنند، و سپس نتایج را روی پیشنمایش دوربین اعمال کنند، که باید به تغییرات پیکربندی پنجره نیز پاسخ دهد. برای راهنمایی دقیق، به پیشنمایش دوربین مراجعه کنید.
راهکار موقت سازگاری
وقتی برنامههای با جهتگیری ثابت در پنجرهبندی رایانه پیشنمایش دوربین را شروع میکنند، سیستم ممکن است برای جلوگیری از کشیده شدن و پیشنمایشهای جانبی، درمان سازگاری دوربین را راهاندازی کند.
این درمان محیط را در جعبه ایمنی قرار میدهد تا با جهتگیری درخواستی به روشهای زیر مطابقت داشته باشد:
افزودن قاب به پنجره برنامه برای جهتگیری درخواستی: این کار برای جلوگیری از مشکلات کشیدگی ناشی از مقیاسبندی نامناسب انجام میشود.
جعبه شنی چرخش نمایشگر: این درمان دستگاه را در جهتگیری درخواستی شبیهسازی میکند. ازآنجاییکه رایجترین فرض نادرست برای پیشنمایشهای دوربین این است که برنامه در دستگاه عمودی اجرا میشود، چرخش نمایشگر برای برنامههایی که جهت عمودی درخواست میکنند در ۰ درجه و برای دستگاههایی که جهت افقی درخواست میکنند در ۹۰ درجه در جعبه ایمن قرار میگیرد.
برش دوربین: اگر چرخش نمایشگر تغییر کرده باشد، این تغییر در فید دوربین منعکس میشود: اگر دستگاه در جهت افقی باشد و پردازش برای برنامهای که جهت عمودی درخواست میکند راهاندازی شود، میدان دید دوربین برش داده میشود تا شبیه دوربین عمودی شود.
چرخاندن و برش فید دوربین: سیستم روشهای فعالیت
onStop()وonStart()(بهطور پیشفرض) یاonPause()وonResume()را (اعمالشده توسط ملغی کردن هر برنامه OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE) پساز اعمال درمان بهصورت چرخشی اجرا میکند تا مطمئن شود پیشنمایش دوربین بهدرستی نمایش داده میشود.
اگر برنامهها پیشنمایش دوربین را بهدرستی مدیریت کنند، توسعهدهندگان برنامه میتوانند این راهکارهای موقت را ملغی کنند. جایگزینهای هر برنامه را ببینید.
درحال تغییر اندازه
وقتی درمان گرایش درخواستی شبیهسازیشده فعال باشد، تغییر اندازه پنجره رابط کاربری منظرهیاب را مقیاسبندی میکند و نسبت ابعادی آن را حفظ میکند. بقیه پنجره برنامه را میتوان آزادانه تغییر اندازه داد.
تغییر اندازه پنجرهای با نمایاب دوربین
برنامهتان را ازنظر مشکلات سازگاری آزمایش کنید
برای آزمایش برنامهتان و درک نحوه عملکرد آن در ضریبهای شکل مختلف، از منابع زیر استفاده کنید:
- جاریسازی دستگاه: برای آزمایش کردن برنامهتان در دستگاههای تولید (ازجمله دستگاههای مرجع) میزبانیشده در مراکز داده Google، جاریسازی دستگاه Android، با بهرهگیری از Firebase را ببینید
- شبیهسازها در Android Studio: برای کسب اطلاعات درباره ایجاد شبیهسازها برای دستگاههای مرجع، به ایجاد و مدیریت دستگاههای مجازی مراجعه کنید
- شبیهساز تغییرپذیر اندازه Android Studio: برای کسب اطلاعات درباره دسترسی به دستگاههای مجازی، اجرای برنامهها در «شبیهساز 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(activity.isLetterboxed()); }); } }
در حالت ایدهآل، این نوع آزمایش را فقط تا زمانی اجرا کنید که موفق شود و تأیید کند که فعالیتهای برنامه شما کل فضای نمایشگر دردسترس برنامه را اشغال میکند. برنامه خود را در همه انواع دستگاه آزمایش کنید تا از عملکرد یکنواخت آن مطمئن شوید.
ملغی کردن برای هر برنامه
Android ملغی کردنهایی ارائه میدهد که رفتار پیکربندیشده برنامهها را تغییر میدهد. برای
مثال، ملغی کردن FORCE_RESIZE_APP به سیستم دستور میدهد
حالت سازگاری اندازه را دور بزند و اندازه برنامه را تغییر دهد تا با ابعاد نمایشگر
مطابقت داشته باشد، حتی اگر resizeableActivity="false" در مانیفست برنامه
مشخص شده باشد.
تولیدکنندگان دستگاه برای برنامههای منتخب—یا همه برنامهها—در دستگاههای خاصی ملغیسازی اعمال میکنند. در Android 14 (میانای برنامه کاربردی سطح ۳۴) و بالاتر، کاربران میتوانند ازطریق تنظیمات دستگاه برای برنامهها ملغی اعمال کنند. در Android 16 (میانای برنامه کاربردی سطح ۳۶) و بالاتر، مالکان دستگاه مجازی در دستگاههای انتخابی که مالکان دستگاه مجازی مدیریت میکنند لغو اعمال میکنند.
ملغی کردنهای کاربر برای هر برنامه
در Android 14 و بالاتر، منو تنظیمات به کاربران امکان میدهد نسبت ابعادی برنامهها را تغییر دهند. دستگاههای دارای صفحهنمایش بزرگ مثل دستگاههای مرجع منو را پیادهسازی میکنند.
این منو حاوی فهرستی از همه برنامههای نصبشده در دستگاه است. کاربران برنامهای را انتخاب میکنند و سپس نسبت ابعادی برنامه را روی ۳:۴، ۱:۱، تمامصفحه، یا مقدار دیگری که سازنده دستگاه پیکربندی کرده است تنظیم میکنند. کاربران همچنین میتوانند نسبت ابعادی را به پیشفرض برنامه که در مانیفست برنامه مشخص شده است بازنشانی کنند.
برنامهها میتوانند با تنظیم برچسبهای PackageManager.Property زیر، از لغو سازگاری انصراف دهند:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
برای انصراف دادن از ملغی کردن سازگاری نسبت ابعادی کاربر، این دارایی را به مانیفست برنامهتان اضافه کنید و مقدار را روی
falseتنظیم کنید:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>برنامه شما از فهرست برنامهها در تنظیمات دستگاه مستثنا خواهد شد. کاربران نمیتوانند نسبت ابعادی برنامه را ملغی کنند.
تنظیم خصوصیت روی
trueتأثیری ندارد.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
برای انصراف دادن از گزینه تمامصفحه سازگاری نسبت ابعادی کاربر جایگزین، این دارایی را به مانیفست برنامه خود اضافه کنید و مقدار را روی
falseتنظیم کنید:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>گزینه تمامصفحه از فهرست گزینههای نسبت ابعادی در تنظیمات دستگاه برداشته میشود. کاربران نمیتوانند رونویسی تمامصفحه را برای برنامه شما اعمال کنند.
تنظیم این دارایی روی
trueتأثیری ندارد.
برنامهتان را برای همه صفحهنمایشها بهینهسازی کنید: در برنامهتان محدودیتهای نسبت ابعادی تنظیم نکنید. از کلاسهای اندازه پنجره برای پشتیبانی از چیدمانهای مختلف براساس مقدار فضای نمایشگر دردسترس استفاده کنید.
ملغی کردن تنظیمات هر برنامه در دستگاه
سازندگان دستگاه و مالکان دستگاه مجازی (انتخاب برنامههای معتمد و دارای امتیاز) براساس هر برنامه در دستگاههای خاص، ازجمله رایانههای لوحی، دستگاههای تاشو، دستگاههای ChromeOS، و نمایشگرهای خودرو، لغو اعمال میکنند. دستگاههای مرجع ممکن است برخیاز ملغیسازیها را بهطور پیشفرض برای انواع مختلف برنامهها اعمال کنند.
برنامهها میتوانند از اکثر ملغیسازیها انصراف دهند (جدول ملغیسازیهای هر برنامه در زیر را ببینید).
میتوانید برنامه خود را با فعال یا غیرفعال کردن ملغیها بااستفاده از چارچوب سازگاری آزمایش کنید (به ابزارهای چارچوب سازگاری مراجعه کنید). وقتی فعال باشد، ملغیسازیها برای کل برنامه اعمال میشود.
همچنین میتوانید از پل اشکالزدایی Android (adb) برای فعال یا غیرفعال کردن جایگزینها و تعیین اینکه کدام جایگزینها برای برنامه شما اعمال میشوند استفاده کنید.
لغو کردنها را بهصورت زیر فعال یا غیرفعال کنید:
adb shell am compat enable/disable <override name/id> <package>
برای دستگاههای مرجع، بررسی کنید کدام ملغیسازیها برای برنامه شما اعمال میشود:
adb shell dumpsys platform_compat | grep <package name>
جدول زیر فهرست موارد ملغی موجود را بههمراه راهنمایی درباره نحوه بهینهسازی برنامهتان ارائه میدهد تا برنامه نیازی به تکیه بر موارد ملغی نداشته باشد. میتوانید پرچمهای دارایی را به مانیفست برنامهتان اضافه کنید تا از برخیاز ملغیسازیها انصراف دهید.
| ملغی کردن برای هر برنامه | |||
|---|---|---|---|
| نوع | نام | شناسه | شرح |
| سازگاری ورودی | OVERRIDE_MOUSE_TO_TOUCH | 413207127 | با بازنویسی نوع ابزار و منبع MotionEvent هنگام تحویل به برنامه، MotionEvent نمونه از دستگاه موشواره را به رویدادهای لمسی تبدیل میکند. |
| تغییرپذیری اندازه | FORCE_RESIZE_APP | 174042936 | حالت سازگاری اندازه را برای برنامه در تغییرات پیکربندی دور میزند. |
| FORCE_NON_RESIZE_APP | 181136395 | برنامه را در تغییرات پیکربندی به حالت سازگاری اندازه میبرد. | |
| نسبت ابعادی | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | لغو دروازهبان که باید فعال شود تا هرگونه لغو نسبت ابعادی دیگر اعمال شود. |
| OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | اگر فعال باشد (پیشفرض)، محدودیتها حوزه را به فعالیتهای فقط عمودی ملغی میکند. | |
| OVERRIDE_MIN_ASPECT_RATIO_SMALL | 349045028 | حداقل نسبت ابعادی را به ۴:۳ تغییر میدهد. | |
| OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | حداقل نسبت ابعادی را به ۳:۲ تغییر میدهد. | |
| OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | حداقل نسبت ابعادی را به ۱۶:۹ تغییر میدهد. | |
| OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | حداقل نسبت ابعادی را تغییر میدهد تا با ۵۰٪ اندازه نمایشگر (یا نسبت ابعادی صفحه تقسیمشده) مطابقت داشته باشد. | |
| 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 | برنامههای فقط افقی را ۱۸۰ درجه میچرخاند. | |
| OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | محدوده ملغی کردن جهت را به زمانی که برنامه به دوربین متصل است محدود میکند. | |
| OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | وقتی تکلیف تمامصفحه است (ازجمله وقتی کادربندی شده است)، نمایشگر را روی جهت طبیعی افقی ثابت تنظیم میکند. | |
| OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | درخواستهای چرخش از برنامه را نادیده میگیرد تا از حلقههای بینهایت چرخش جلوگیری کند. | |
| OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | درخواستهای مکرر جهتگیری را درحالیکه فعالیت درحال راهاندازی مجدد است نادیده میگیرد. اگر Android تشخیص دهد که برنامهای در یک ثانیه حداقل دو گرایش جدید درخواست میکند، سیستم این را یک حلقه بینهایت چرخش درنظر میگیرد و ملغیسازی را اعمال میکند. | |
| OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | با غیرفعال کردن تنظیم درخواست نادیده گرفتن جهتگیری سازنده دستگاه، از ایجاد نوارهای سیاه در بالا و پایین ویدیو جلوگیری میکند. | |
| میاناهای برنامهسازی کاربردی جعبه شنی | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | از تغییر رفتار هریک از «میاناهای برنامه کاربردی نمایشگر» جلوگیری میکند. |
| ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | میاناهای برنامهسازی کاربردی Display را در برنامه مجبور میکند تا حدود برنامه را برگرداند. میاناهای برنامهسازی کاربردی Display محدودههای ناحیه نمایش منطقی را برمیگردانند، اما گاهی اوقات برنامه فرض میکند که میاناهای برنامهسازی کاربردی Display محدودههای برنامه را برمیگردانند که منجر به مشکلات رابط کاربری میشود. |
|
| OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | میاناهای برنامهسازی کاربردی View استفادهشده در برنامه را مجبور میکند تا حدود برنامه را برگرداند. میاناهای برنامهسازی کاربردی View محدودههای ناحیه نمایش منطقی را برمیگردانند، اما گاهی اوقات برنامه فرض میکند که میاناهای برنامهسازی کاربردی View محدودههای برنامه را برمیگردانند که منجر به مشکلات رابط کاربری میشود. |
|
| سازگاری دوربین | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | چرخش اجباری را خاموش میکند. بهطور پیشفرض، همه برنامههای دوربین با جهتگیری ثابت وقتی پیشنمای دوربین باز است بهاجبار چرخانده میشوند. |
| OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION | 398195815 | شبیهسازی درمان گرایش درخواستی برای سازگاری دوربین را خاموش میکند. بهطور پیشفرض، برنامههای دوربین با جهت ثابت براساس جهت درخواستیشان هنگام باز بودن پیشنمایش دوربین تنظیم میشوند. | |
| OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | بازآوری سخت پیشفرض را که هنگام چرخش اجباری پیشنمای دوربین اعمال میشود برمیدارد. | |
| OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | وقتی پیشنمایش دوربین بهاجبار چرخانده میشود، بازآوری سخت به بازآوری نرم تغییر میکند که به حفظ وضعیت درطول چرخش اجباری کمک میکند. بهطور پیشفرض، وقتی پیشنمایش دوربین بهاجبار چرخانده میشود، Android بازآوری سخت انجام میدهد. بازآوری سخت میتواند باعث بروز مشکلاتی در برنامهها شود، مثلاً وضعیت برنامهها ازدست برود یا برنامهها سیاه شوند. این مشکلات به نحوه ذخیره وضعیت قبلی برنامهها در حافظه نهان بستگی دارد. | |
| OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | بافر تصویر دوربین جلویی درونی را برش میدهد. اگر ملغی کردن غیرفعال باشد، برش دوربین جلویی داخلی برداشته میشود و میدان دید پیشنمایش دوربین افزایش مییابد. بهطور پیشفرض در برخیاز دستگاههای تاشو (دستگاههای مرجع را ببینید)، سیستم پیشنمایش دوربین همه برنامههای دوربین را هنگام استفاده از دوربین جلوی داخلی برش میدهد. | |
| متفرقه | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | از سیاه شدن برنامه وقتی برنامه در حالت «صفحه تقسیم» تمرکز را ازدست میدهد جلوگیری میکند. برنامه قبلاز رسم محتوای برنامه منتظر تمرکز میماند، که میتواند باعث شود برنامه منجمد شود یا صفحه سیاه شود. این لغو به Android امکان میدهد رویداد تمرکز جعلی را به برنامه ارسال کند، که به برنامه علامت میدهد دوباره شروع به طراحی محتوا کند. |
OVERRIDE_MOUSE_TO_TOUCH
درمان سازگاری را فعال میکند که نمونههای MotionEvent را از موشواره یا صفحه لمسی به رویدادهای لمسی تبدیل میکند. این کار با بازنویسی MotionEvent منبع به SOURCE_TOUCHSCREEN و MotionEvent نوع ابزار به TOOL_TYPE_FINGER هنگام تحویل رویدادهای حرکت به برنامه انجام میشود.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.
نحوه بهینهسازی برنامهها
برنامه شما باید رویدادهای ورودی از موشواره و صفحه لمسی، ازجمله اشاره صفحه لمسی و پیمایش چرخ موشواره را مدیریت کند. صفحهکلید، موشواره، و پد لمسی را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
FEATURE_PC را در عنصر <uses-feature> در مانیفست برنامه اعلام کنید.
<uses-feature android:name="android.hardware.type.pc"
android:required="false" />
توجه: android:required="false" را تنظیم کنید تا ویژگی رایانه اختیاری باشد و Google Play برنامه را در دستگاههای غیررایانه مستثنی نکند.
پرچمهای دارایی برای تنظیم ملغی کردن
هیچکدام.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
تغییر اجباری اندازه برنامه
بستههایی را که ملغیسازی روی آنها اعمال میشود مجبور میکند که قابلیت تغییر اندازه داشته باشند و بتوانند وارد حالت چندپنجرهای شوند. برای همه اندازههای نمایشگر اعمال میشود.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
در مانیفست برنامه، مشخصه 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 را در سطح فعالیت یا برنامه تنظیم کنید.
نحوه بهینهسازی برنامهها
محدودیتهای نسبت ابعادی را در برنامهتان تنظیم نکنید. مطمئن شوید برنامهتان از اندازههای مختلف نمایشگر پشتیبانی میکند. از کلاسهای اندازه پنجره
برای پشتیبانی از چیدمانهای مختلف براساس مقدار فضایی که برنامهتان
در صفحهنمایش دارد استفاده کنید.
میانای برنامهسازی کاربردی «نوشتن» WindowSizeClass و میانای برنامهسازی کاربردی «مشاهده»
WindowSizeClass را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
محدودیت نسبت ابعادی را مشخص کنید یا پرچم دارایی
PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE را روی false تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
تنظیمات برنامهای را که نسبت ابعادی حداقلی را برای فعالیتهای دارای
جهت فقط عمودی اجباری میکند محدود میکند. بهطور پیشفرض فعال است و فقط درصورتی اعمال میشود
که OVERRIDE_MIN_ASPECT_RATIO نیز فعال باشد.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینهسازی برنامهها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچمهای دارایی برای تنظیم ملغی کردن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_MIN_ASPECT_RATIO_SMALL
حداقل نسبت ابعادی فعالیت را روی مقدار کوچکی (۴:۳) تنظیم میکند.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
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
حداقل نسبت ابعادی فعالیت را روی مقدار متوسط (۳:۲) تنظیم میکند.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
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
حداقل نسبت ابعادی فعالیت را روی مقدار بزرگی (۱۶:۹) تنظیم میکند.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینهسازی برنامهها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچمهای دارایی برای تنظیم ملغی کردن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
استفاده از نسبت ابعادی صفحهٔ دونیمه را فعال میکند. به برنامه اجازه میدهد از همه فضای دردسترس در حالت صفحهٔ دونیمه استفاده کند و از ایجاد نوارهای سیاه در بالا و پایین صفحه جلوگیری کند.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینهسازی برنامهها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچمهای دارایی برای تنظیم ملغی کردن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
توجه: فرمانها فقط بهطور موقت ملغی کردن را اعمال یا حذف میکنند.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
جایگزینی حداقل نسبت ابعادی در حالت تمامصفحه عمودی را غیرفعال میکند تا از تمام فضای صفحهنمایش دردسترس استفاده شود.
برنامهها چگونه میتوانند به همان نتیجه لغو دست یابند
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه بهینهسازی برنامهها
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
پرچمهای دارایی برای تنظیم ملغی کردن
OVERRIDE_MIN_ASPECT_RATIO را ببینید.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_ANY_ORIENTATION
ملغی کردنهای زیر را فعال میکند تا هر جهتی را ملغی کند:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
برنامهها چگونه میتوانند به همان نتیجه لغو دست یابند
مشخصه مانیفست activity:screenOrientation را تنظیم کنید،
یا از «میانای برنامهسازی کاربردی» Activity#setRequestedOrientation() استفاده کنید.
نحوه بهینهسازی برنامهها
برنامه شما باید از همه جهتگیریها پشتیبانی کند. تغییر جهت یک تغییر پیکربندی است که میتواند به دو روش انجام شود: اجازه دادن به سیستم برای ازبین بردن و بازسازی برنامه، یا مدیریت تغییرات پیکربندی توسط خودتان. اگر تغییرات پیکربندی را خودتان مدیریت میکنید، وضعیت برنامه را میتوانید بااستفاده از ViewModel حفظ کنید. در موارد بسیار محدود، میتوانید تصمیم بگیرید جهتیابی را فقط در نمایشگرهای کوچک قفل کنید، اگرچه انجام این کار ممکن است بهخوبی مقیاسبندی نشود و بهتر است به کاربر اجازه دهید برنامه را درصورت نیاز بچرخاند. در Android 12L و نسخههای بالاتر،
پیکربندی دستگاه میتواند جهتگیری ثابت را ملغی کند. برای اطلاعات بیشتر درباره مدیریت تغییرات پیکربندی و پشتیبانی از همه جهتها، مدیریت تغییرات پیکربندی،
نمای کلی مدل نمایشی، و جهت برنامه در تلفنها محدود است اما در دستگاههای دارای صفحهنمایش بزرگ محدود نیست را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم دارایی
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
را روی false تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_ANY_ORIENTATION_TO_USER
به برنامه اجازه میدهد فضای نمایشگر دردسترس را پر کند. هرگونه محدودیت جهت،
قابلیت تغییر اندازه، و نسبت ابعادی مشخصشده در مانیفست برنامه را ملغی میکند. همچنین
تماسهای
Activity#setRequestedOrientation() یا
Activity#getRequestedOrientation() را نادیده میگیرد.
برنامهها چگونه میتوانند به همان نتیجه لغو دست یابند
مشخصه مانیفست
android:screenOrientationرا تنظیم نکنید، یا مشخصه را روی"user"تنظیم کنید.ویژگی مانیفست
android:resizeableActivityرا رویtrueتنظیم کنید.در صفحههای کوچک، برای پشتیبانی از تغییر اندازه برنامه درحالیکه حالت چندپنجرهای با
android:resizeableActivity=falseغیرفعال است، پرچم فرادادهandroid.supports_size_changesرا رویtrueتنظیم کنید.minAspectRatioوmaxAspectRatioرا تنظیم نکنید.
نحوه بهینهسازی برنامهها
برنامهتان را فعال کنید تا از همه جهتگیریها پشتیبانی کند؛ مشخصات screenOrientation
را در مانیفست برنامهتان تنظیم نکنید. با تنظیم کردن
مشخصه android:resizeableActivity در مانیفست برنامهتان روی true،
از قابلیت تغییر اندازه برنامه،
حالت چندپنجرهای، و همه نسبتهای ابعادی نمایشگر پشتیبانی کنید. به
پشتیبانی از اندازههای مختلف نمایشگر مراجعه کنید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
OVERRIDE_ANY_ORIENTATION را ببینید.
پرچمهای دارایی برای تنظیم ملغی کردن
OVERRIDE_ANY_ORIENTATION را ببینید.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
توجه: فرمانها فقط بهطور موقت ملغی کردن را اعمال یا حذف میکنند.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
جهت عمودی را برای همه فعالیتهای بسته فعال میکند. مگر اینکه OVERRIDE_ANY_ORIENTATION فعال باشد، از ملغیسازی فقط زمانی استفاده میشود که فعالیت هیچ جهتگیری ثابتی را مشخص نکرده باشد.
برنامهها چگونه میتوانند به همان نتیجه لغو دست یابند
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه بهینهسازی برنامهها
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
OVERRIDE_ANY_ORIENTATION را ببینید.
پرچمهای دارایی برای تنظیم ملغی کردن
OVERRIDE_ANY_ORIENTATION را ببینید.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
جهتگیری بدون حسگر را برای همه فعالیتهای موجود در بسته فعال میکند. مگر اینکه 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
جهت reverseLandscape را برای همه فعالیتهای موجود در بسته فعال میکند. مگر اینکه OVERRIDE_ANY_ORIENTATION فعال باشد، جایگزینی فقط زمانی استفاده میشود که هیچ جهتگیری ثابتی توسط فعالیت مشخص نشده باشد.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه بهینهسازی برنامهها
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
OVERRIDE_ANY_ORIENTATION را ببینید.
پرچمهای دارایی برای تنظیم ملغی کردن
OVERRIDE_ANY_ORIENTATION را ببینید.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
محدودیتها OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT، OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR، و OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE فقط زمانی اعمال میشوند که اتصال دوربین فعال باشد.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه بهینهسازی برنامهها
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
OVERRIDE_ANY_ORIENTATION را ببینید.
پرچمهای دارایی برای تنظیم ملغی کردن
OVERRIDE_ANY_ORIENTATION را ببینید.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
وقتی شرایط زیر برقرار باشد، جهت نمایش را به جهت طبیعی افقی محدود میکند:
- فعالیت در حالت تمامصفحه است
- دارایی عنصر انصراف
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDEفعال نیست - تنظیم درخواست نادیده گرفتن جهتگیری سازنده دستگاه برای نمایشگر فعال است
- جهت طبیعی نمایشگر افقی است
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.
نحوه بهینهسازی برنامهها
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم دارایی
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
را روی false تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
توجه: فرمانها فقط بهطور موقت ملغی کردن را اعمال یا حذف میکنند.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
خطمشی سازگاری را فعال میکند که بهروزرسانی جهت برنامه را در پاسخ به فراخوانی برنامه Activity#setRequestedOrientation() وقتی برنامه درحال بازراهاندازی است یا درمان سازگاری دوربین فعال دارد رد میکند.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
پرچم خصوصیت را
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
روی true تنظیم کنید.
نحوه بهینهسازی برنامهها
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم خصوصیت را
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
روی false تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
خطمشی سازگاری را فعال میکند که جهتگیری درخواستشده برنامه را در
پاسخ به فراخوانی برنامه
Activity#setRequestedOrientation() بیشاز دو بار
در یک ثانیه نادیده میگیرد، اگر فعالیت برای جهتگیری ثابت دارای کادر حروف نباشد.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.
نحوه بهینهسازی برنامهها
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم خصوصیت
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED را روی
false تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
بستههایی را که از عملکرد درخواست نادیده گرفتن جهتگیری مستثنا میکند و سازندگان دستگاه میتوانند آن را برای ناحیه نمایشگر یا کل نمایشگر فعال کنند.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.
نحوه بهینهسازی برنامهها
OVERRIDE_ANY_ORIENTATION را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
بدون امکان انصراف. اگر برنامه با دستگاهی که تنظیم «سازنده دستگاه درخواست چرخش را نادیده میگیرد» در آن فعال است سازگار نباشد، غیرفعال کردن ملغیسازی میتواند خطرناک باشد. برای غیرفعال کردن ملغی کردن، با روابط توسعهدهنده Android تماس بگیرید.
پرچمهای دارایی برای تنظیم ملغی کردن
هیچ پرچم داراییای برای این ملغیسازی وجود ندارد.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
هرگز نمایش ندادن میاناهای برنامهسازی کاربردی جعبه ایمنی
بستهها را مجبور میکند که هرگز جعبه شنی API Display برای فعالیت حالت سازگاری با اندازه یا حالت دارای حاشیه اعمال نشود. Display APIها
همچنان حدود ناحیه نمایش را ارائه میدهند.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
فعالیتها را با تنظیم کردن مشخصه مانیفست android:resizeableActivity روی true
یا پرچم فراداده android.supports_size_changes روی true قابل تغییر اندازه اعلام کنید.
نحوه بهینهسازی برنامهها
برنامههایی که اعلام میکنند کاملاً تغییرپذیر هستند نباید هرگز برای جایگذاری عناصر میانای کاربر به اندازه نمایشگر متکی باشند. برنامهتان را به «میاناهای برنامهسازی کاربردی» بهروزی که
WindowMetrics را ارائه میدهند انتقال دهید. اگر از Jetpack Compose استفاده میکنید، از
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 sandboxing را صرفنظر از حالت پنجرهبندی اعمال کنند. میاناهای برنامهسازی کاربردی Display همیشه حدود برنامه را ارائه میدهند.
برنامهها چگونه میتوانند به همان نتیجه لغو دست یابند
فعالیتها را با تنظیم کردن ویژگی
android:resizeableActivity روی false یا پرچم فراداده
android.supports_size_changes روی false غیرقابل تغییر اندازه اعلام کنید.
نحوه بهینهسازی برنامهها
برنامههایی که اعلام میکنند کاملاً تغییرپذیر هستند نباید هرگز برای
موقعیتیابی عناصر میانای کاربر به اندازه نمایشگر متکی باشند. برنامهتان را از میاناهای برنامهسازی کاربردی منسوخشده به میاناهای برنامهسازی کاربردی بهروزی که WindowMetrics ارائه میدهند منتقل کنید. به
WindowMetricsCalculator مراجعه کنید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
بدون امکان انصراف. از میاناهای برنامهسازی کاربردی منسوخ انتقال دهید.
پرچمهای دارایی برای تنظیم ملغی کردن
هیچ پرچم داراییای برای این ملغیسازی وجود ندارد.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
برای برداشتن ملغی کردن:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
بستهها را مجبور میکند تا میاناهای برنامهسازی کاربردی زیر View را در محدوده فعالیتها در محیط امن اجرا کنند:
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
بااستفاده از میاناهای برنامهسازی کاربردی که حدود پنجره برنامه و فاصلههای نسبی نسبتبه پنجره برنامه را ارائه میدهند، بهجای حدود نمایشگر دستگاه و فاصلههای نسبی نسبتبه نمایشگر دستگاه، مشکل را در کد برنامه برطرف کنید.
نحوه بهینهسازی برنامهها
برنامهها باید از View میانای برنامهسازی کاربردی استفاده کنند و احتمال اعمال شدن حالت چندپنجرهای و نامه صندوقی را برای برنامه درنظر بگیرند. به
WindowMetricsCalculator مراجعه کنید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم خصوصیت را
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
روی false تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
توجه: فرمانها فقط بهطور موقت ملغی کردن را اعمال یا حذف میکنند.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
چرخش اجباری را غیرفعال میکند. تجربه کاربری را در برخیاز برنامهها بهبود میبخشد.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
پرچم خصوصیت را
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
روی false تنظیم کنید.
نحوه بهینهسازی برنامهها
به جهتگیری حسگر دوربین ذخیرهشده در حافظه نهان یا اطلاعات دستگاه تکیه نکنید. برای راهنمایی درباره سازگاری دوربین، معرفی منظرهیاب دوربین و پشتیبانی از سطوح تغییرپذیر در برنامه دوربین را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم خصوصیت را
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
روی true تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن ملغی کردن که چرخش اجباری را برمیدارد:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
برای برداشتن ملغی کردن، که اجازه میدهد چرخش اجباری انجام شود:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION
شبیهسازی درمان گرایش درخواستی برای دوربین را غیرفعال میکند. تجربه کاربری را در برخیاز برنامهها بهبود میبخشد.
برنامهها چگونه میتوانند به همان نتیجه لغو دست یابند
پرچم خصوصیت را
PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION
روی false تنظیم کنید.
نحوه بهینهسازی برنامهها
به جهتگیری حسگر دوربین ذخیرهشده در حافظه نهان یا اطلاعات دستگاه تکیه نکنید. برای راهنمایی درباره سازگاری دوربین، معرفی منظرهیاب دوربین و پشتیبانی از سطوح تغییرپذیر در برنامه دوربین را ببینید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
ازآنجاییکه این دارایی درمان سازگاری را غیرفعال میکند، میتوانید با درنظر گرفتن تغییرات چرخش نمایشگر پویا، جهت حسگر دستگاه، و اندازه پنجره و پیشنمایش، تجربه کاربر را بهبود دهید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION"
android:value="true|false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن ملغی کردن، که شبیهسازی جهتگیری درخواستی را برمیدارد:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>
برای برداشتن ملغی کردن، که اجازه میدهد شبیهسازی جهتگیری درخواستی اتفاق بیفتد:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>
توجه: فرمانها فقط بهطور موقت ملغی کردن را اعمال یا حذف میکنند.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
بازآوری فعالیت را پساز چرخش اجباری غیرفعال میکند. وقتی بازآوری باعث ازدست رفتن وضعیت در برنامهها میشود، تجربه کاربر را بهبود میبخشد.
برنامهها چگونه میتوانند به نتیجهای مشابه با ملغی کردن دست یابند
پرچم خصوصیت را
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
روی false تنظیم کنید.
نحوه بهینهسازی برنامهها
به OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION مراجعه کنید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم خصوصیت را
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
روی true تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن ملغیسازی که بازآوری فعالیت را برمیدارد:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
برای برداشتن ملغیسازی که اجازه میدهد فعالیتها بازآوری شوند:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
باعث میشود بستههایی که روی آنها اعمال میشود، بهجای چرخه onResume() →
onStop() → onResume() پساز چرخش اجباری سازگاری دوربین، از چرخه onResume()
→ onPause() → 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() پیادهسازی شده است)،
که به کاربران امکان میدهد صرفنظر از حالت پنجرهبندی، تصمیم بگیرند که کل صفحه یا پنجره یک برنامه را همرسانی کنند. یا با
createScreenCaptureIntent(MediaProjectionConfig)
با آرگومان MediaProjectionConfig که از
تماس با createConfigForUserChoice() برگردانده شده است تماس بگیرید.
نحوه بهینهسازی برنامهها
به کاربران اجازه میدهد انتخاب کنند که درطول پخش محتوا، کل صفحهنمایش دستگاه یا پنجره برنامه همرسانی شود. این رفتار از Android 14 به بعد پیشفرض است.
برنامهتان را تغییرپذیر کنید (resizeableActivity="true") تا از حالت چندپنجرهای پشتیبانی کند.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
بهدلیل اهمیت حریم خصوصی کاربر، برنامه شما نمیتواند این ملغیسازی را غیرفعال کند یا از آن انصراف دهد.
پرچمهای دارایی برای تنظیم ملغی کردن
هیچکدام.
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن ملغیسازی، که انصراف برنامه از همرسانی جزئی صفحهنمایش را لغو میکند (یعنی همرسانی جزئی صفحهنمایش را فعال میکند):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
برای برداشتن ملغیسازی که به برنامه اجازه میدهد از همرسانی صفحه جزئی انصراف دهد:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
توجه: فرمانها فقط بهطور موقت ملغی کردن را اعمال یا حذف میکنند.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
ارسال کانونی جعلی برای برنامههای غیرکانونی در حالت صفحهٔ دونیمه را فعال میکند. برخیاز موتورهای بازی قبلاز رسم محتوای برنامه منتظر دریافت تمرکز میمانند؛ بنابراین، تمرکز جعلی به برنامهها کمک میکند وقتی ازسر گرفته میشوند و هنوز تمرکز ندارند، از سیاه ماندن جلوگیری کنند.
برنامهها چگونه میتوانند به همان نتیجه لغو دست یابند
پرچم خصوصیت
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS را روی
true تنظیم کنید.
نحوه بهینهسازی برنامهها
اگر برنامهتان از چندین جهتگیری و تغییر پیکربندی بهخوبی پشتیبانی کند، میتوانید از بروز این مشکل جلوگیری کنید. با پیروی از رهنمودهای کیفیت برنامه تطبیقی، برنامهتان را برای پشتیبانی از همه ضرایب شکل دستگاه و حالتهای پنجره برنامه فعال کنید.
اگر از موتور بازی Unity استفاده میکنید، به نسخه 2019.4.40 یا جدیدتر ارتقا دهید و بازیتان را دوباره صادر کنید. گزینه پنجره تغییرپذیر اندازه را در تنظیمات پخشکننده Android علامتگذاری کنید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم خصوصیت
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS را روی
false تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
توجه: فرمانها فقط بهطور موقت ملغیسازی را اعمال یا حذف میکنند.
OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
وقتی ملغیسازی فعال باشد، فعالیت پیکربندیای دریافت میکند که شامل درونبرهای نوار زیرنویس ناشنوایان است. معمولاً، حاشیههای نوار زیرنویس ناشنوایان در پیکربندی گنجانده نمیشوند.
برنامهها چگونه میتوانند به همان نتیجه لغو دست یابند
نمایشگر لبهبهلبه را فعال کنید. به موارد زیر مراجعه کنید:
- ترکیب: درباره حاشیههای پنجره
- بازدیدها: نمایش محتوا لبهبهلبه در بازدیدها
- پیکربندی: تغییرات رفتار: برنامههایی که Android 15 یا بالاتر را هدفیابی میکنند
نحوه بهینهسازی برنامهها
اگر برنامهتان نمایش لبهبهلبه را فعال کند، میتوانید از بروز این مشکل جلوگیری کنید.
نحوه غیرفعال کردن یا انصراف دادن از ملغی کردن
پرچم خصوصیت
PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS را روی
false تنظیم کنید.
پرچمهای دارایی برای تنظیم ملغی کردن
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS"
android:value="true|false"/>
فرمانهای adb برای آزمایش کردن ملغی کردن
برای اعمال کردن لغو:
adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>
برای برداشتن ملغی کردن:
adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>
توجه: فرمانها فقط بهطور موقت ملغی کردن را اعمال یا حذف میکنند.
منابع بیشتر
-
مالک دستگاه مجازی برنامهای مطمئن یا دارای امتیاز است که دستگاه مجازی را مدیریت میکند. مالکان دستگاه مجازی دستگاههای مجازی را برای پردازش برنامهها ایجاد میکنند و سپس برنامهها را در دستگاههای دور، مانند رایانههای شخصی، دستگاههای واقعیت مجازی، یا سیستمهای اطلاعات و سرگرمی خودرو، نمایش میدهند. مالک دستگاه مجازی در دستگاه محلی، مانند تلفن، باشد. ↩