حالت سازگاری دستگاه

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

تغییرات پیکربندی دستگاه که می تواند حالت سازگاری اندازه را فعال کند شامل موارد زیر است:

  • چرخش دستگاه
  • تاشو یا باز شدن دستگاه تاشو
  • بین حالت نمایش تمام صفحه و تقسیم صفحه تغییر دهید

موضوع

حالت سازگاری اندازه معمولاً برای فعالیت‌هایی اعمال می‌شود که از نظر جهت یا نسبت ابعاد محدود شده‌اند و پیکربندی شده‌اند (یا توسط سیستم تعیین می‌شوند) تا غیرقابل تغییر اندازه باشند.

اگر برنامه شما هر یک از معیارهای زیر را داشته باشد قابل تغییر اندازه در نظر گرفته می شود - و در حالت سازگاری با اندازه قرار نمی گیرد:

اگر برنامه شما هیچ یک از شرایط را نداشته باشد ، قابل تغییر در اندازه نیست و می تواند در حالت سازگاری با اندازه قرار گیرد.

بهینه سازی

برنامه باید از همه اندازه های نمایش پشتیبانی کند. با تنظیم ویژگی 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 onCreate() تنظیم کنید زیرا درخواست جهت گیری می تواند به طور غیرمنتظره ای با تغییرات پیکربندی کنترل نشده راه اندازی شود.
  • فرض کنید جهت طبیعی دستگاه ( 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های مشاهده سوء استفاده:

بهینه سازی

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

راه حل سازگاری

دو نادیده گرفتن 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 برای هر برنامه لغو کنند تا یک رویداد فوکوس جعلی را برای یک برنامه در حالت چند پنجره‌ای ارائه کنند. لغو به فعالیت امکان می دهد محتوا را دوباره ترسیم کند و سیاه نشود.

برنامه خود را برای مشکلات سازگاری آزمایش کنید

برای آزمایش برنامه خود و درک نحوه عملکرد آن در فاکتورهای مختلف، از منابع زیر استفاده کنید:

صندوق دار است

بررسی کنید که هر فعالیتی بتواند از تمام فضای نمایش در دسترس برنامه استفاده کند. ابتدا کد زیر را در پوشه تست خود اعلام کنید:

کاتلین

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

موارد زیر را برای نادیده گرفتن هر جهتی فعال می کند:

چگونه برنامه‌ها می‌توانند به همان نتیجه‌ای که نادیده گرفته می‌شوند، برسند

ویژگی مانیفست 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>

توجه: دستورات فقط به طور موقت اعمال می شوند یا لغو را حذف می کنند.

منابع اضافی