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

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 Activity.isLetterboxed() : Boolean {
    if (isInMultiWindowMode) return false

    val wmc = WindowMetricsCalculator.getOrCreate()
    val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds
    val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds

    val isScreenPortrait = maxBounds.height() > maxBounds.width()

    return if (isScreenPortrait) {
        currentBounds.height() < maxBounds.height()
    } else {
        currentBounds.width() < maxBounds.width()
    }
}

جاوا

public boolean isLetterboxed(Activity activity) {
    if (activity.isInMultiWindowMode()) {
        return false;
    }

    WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate();
    Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds()
    Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds();

    boolean isScreenPortrait = maxBounds.height() > maxBounds.width();

    return (isScreenPortrait)
        ? currentBounds.height() < maxBounds.height()
        : currentBounds.width() < maxBounds.width();
}

سپس آزمایشی را برای اثبات رفتار اجرا کنید و مطمئن شوید که فعالیت هدف در جعبه نامه نیست:

کاتلین

@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)

@Test
fun activity_launched_notLetterBoxed() {
    activityRule.scenario.onActivity {
        assertThat(it.isLetterboxed()).isFalse()
    }
}

جاوا

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) {
        scenario.onActivity(activity -> {
            assertThat(isLetterboxed(activity)).isFalse();
        });
    }
}

در حالت ایده‌آل، این نوع آزمایش را فقط تا زمانی اجرا کنید که موفق شود و ثابت کند که فعالیت‌های برنامه شما کل فضای نمایشی موجود در برنامه را اشغال می‌کند. برنامه خود را روی همه انواع دستگاه آزمایش کنید تا از رفتار ثابت اطمینان حاصل کنید.

لغو هر برنامه

Android مواردی را ارائه می دهد که رفتار پیکربندی شده برنامه ها را تغییر می دهد. برای مثال، لغو FORCE_RESIZE_APP به سیستم دستور می‌دهد حالت سازگاری با اندازه را دور بزند و اندازه برنامه را طوری تغییر دهد که با ابعاد نمایش مطابقت داشته باشد، حتی اگر resizeableActivity="false" در مانیفست برنامه مشخص شده باشد.

سازندگان دستگاه‌ها برای منتخب برنامه‌ها یا همه برنامه‌ها در دستگاه‌های خاص با صفحه‌نمایش بزرگ، لغو اعمال می‌کنند. در Android 14 (سطح API 34) و بالاتر، کاربران می‌توانند از طریق تنظیمات دستگاه، برنامه‌ها را لغو کنند.

نادیده گرفتن کاربر برای هر برنامه

در اندروید 14 و بالاتر، منوی تنظیمات به کاربران امکان می‌دهد نسبت ابعاد برنامه‌ها را تغییر دهند. دستگاه های صفحه بزرگ مانند دستگاه های مرجع منو را اجرا می کنند.

منو حاوی لیستی از تمام برنامه های نصب شده بر روی دستگاه است. کاربران یک برنامه را انتخاب می کنند و سپس نسبت ابعاد برنامه را روی 3:4، 1:1، تمام صفحه یا مقدار دیگری که توسط سازنده دستگاه پیکربندی شده است تنظیم می کنند. کاربران همچنین می توانند نسبت تصویر را به پیش فرض برنامه که در مانیفست برنامه مشخص شده است، بازنشانی کنند.

برنامه‌ها می‌توانند با تنظیم برچسب‌های PackageManager.Property زیر از لغو سازگاری انصراف دهند:

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

    برای انصراف از نادیده گرفتن سازگاری نسبت ابعاد کاربر، ویژگی را به مانیفست برنامه خود اضافه کنید و مقدار را روی false تنظیم کنید:

    <application>
        <property
            android:name="android.window.
            PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE"
            android:value="false" />
    </application>
    

    برنامه شما از لیست برنامه ها در تنظیمات دستگاه حذف می شود. کاربران نمی توانند نسبت تصویر برنامه را نادیده بگیرند.

    تنظیم خاصیت روی true تاثیری ندارد.

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    برای انصراف از گزینه تمام صفحه لغو سازگاری با نسبت ابعاد کاربر، ویژگی را به مانیفست برنامه خود اضافه کنید و مقدار را روی false قرار دهید:

    <application>
        <property
            android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE"
            android:value="false" />
    </application>
    

    گزینه تمام صفحه از لیست گزینه های نسبت تصویر در تنظیمات دستگاه حذف می شود. کاربران نمی توانند لغو تمام صفحه را در برنامه شما اعمال کنند.

    تنظیم این ویژگی روی true تاثیری ندارد.

برنامه خود را برای همه صفحه‌ها بهینه کنید: محدودیت‌های نسبت تصویر را در برنامه خود تنظیم نکنید. از کلاس های اندازه پنجره برای پشتیبانی از طرح بندی های مختلف بر اساس میزان فضای نمایش موجود استفاده کنید.

تولیدکننده دستگاه برای هر برنامه لغو می شود

سازندگان دستگاه‌ها، نادیده‌گیری‌ها را بر اساس هر برنامه در دستگاه‌های منتخب اعمال می‌کنند. دستگاه های مرجع ممکن است برخی از موارد لغو را به طور پیش فرض برای انواع برنامه ها اعمال کنند.

برنامه‌ها می‌توانند از اکثر موارد لغو انصراف دهند (جدول لغو برای هر برنامه را در زیر ببینید).

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

همچنین می‌توانید از Android Debug Bridge (adb) برای فعال یا غیرفعال کردن موارد لغو استفاده کنید و تعیین کنید کدام موارد لغو برای برنامه شما اعمال می‌شود.

فعال یا غیرفعال کردن لغو به صورت زیر:

adb shell am compat enable/disable <override name/id> <package>

برای دستگاه‌های مرجع ، بررسی کنید که کدام لغو برای برنامه شما اعمال می‌شود:

adb shell dumpsys platform_compat | grep <package name>

جدول زیر موارد لغو موجود را همراه با راهنمایی در مورد نحوه بهینه سازی برنامه خود فهرست می کند تا برنامه نیازی به اتکا به موارد لغو نداشته باشد. برای انصراف از برخی موارد لغو، می‌توانید پرچم‌های دارایی را به مانیفست برنامه خود اضافه کنید.

لغو هر برنامه
تایپ کنید نام شناسه شرح
قابلیت تغییر اندازه FORCE_RESIZE_APP 174042936 حالت سازگاری اندازه را برای برنامه در تغییرات پیکربندی دور می‌زند.
FORCE_NON_RESIZE_APP 181136395 برنامه را با تغییرات پیکربندی به حالت سازگاری با اندازه وادار می کند.
نسبت ابعاد OVERRIDE_MIN_ASPECT_RATIO 174042980 نادیده گرفتن دروازه‌بان که باید برای اعمال هرگونه نادیده گرفتن نسبت ابعاد دیگری فعال باشد.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 اگر فعال باشد (پیش‌فرض)، محدوده لغو را به فعالیت‌های فقط عمودی محدود می‌کند.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 حداقل نسبت تصویر را به 3:2 تغییر می دهد.
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 حداقل نسبت تصویر را به 16:9 تغییر می دهد.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 حداقل نسبت تصویر را به تناسب 50 درصد اندازه صفحه نمایش (یا نسبت تصویر تقسیم صفحه) تغییر می دهد.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 نادیده گرفتن حداقل نسبت تصویر را غیرفعال می کند تا وقتی دستگاه به صورت عمودی است، برنامه ها تمام صفحه باشند.
گرایش OVERRIDE_ANY_ORIENTATION 265464455 نادیده گرفتن هر جهتی را فعال می کند.
OVERRIDE_ANY_ORIENTATION_TO_USER 310816437 جهت گیری، قابلیت تغییر اندازه و محدودیت های نسبت تصویر را نادیده می گیرد.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 زمانی که یک فعالیت جهت گیری نامشخصی دارد، جهت عمودی بودن را لغو می کند.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 هنگامی که یک فعالیت جهت گیری نامشخصی دارد، جهت گیری nosensor بودن (استفاده از جهت گیری طبیعی دستگاه) را لغو می کند.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 برنامه های فقط افقی را 180 درجه می چرخاند.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 محدوده نادیده گرفتن جهت را به زمانی که برنامه به دوربین متصل است محدود می کند.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 هنگامی که یک کار تمام صفحه است (از جمله زمانی که جعبه نامه) نمایشگر را روی جهت طبیعی افقی ثابت تنظیم می کند.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 برای جلوگیری از چرخش حلقه‌های بی‌نهایت، درخواست‌های جهت‌گیری از برنامه را نادیده می‌گیرد.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 درخواست‌های جهت‌گیری مکرر را هنگام راه‌اندازی مجدد یک فعالیت نادیده می‌گیرد. اگر Android تشخیص دهد که یک برنامه حداقل دو جهت جدید را در عرض یک ثانیه درخواست می کند، سیستم این را یک چرخش بی نهایت در نظر می گیرد و لغو را اعمال می کند.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 با غیرفعال کردن تنظیم درخواست جهت نادیده گرفتن سازنده دستگاه از ارسال نامه جلوگیری می کند.
Sandbox API NEVER_SANDBOX_DISPLAY_APIS 184838306 از تغییر رفتار هر API نمایشگر جلوگیری می کند.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 Display API های موجود در برنامه را مجبور می کند تا محدوده های برنامه را برگردانند. Display APIs محدوده‌های منطقی ناحیه نمایش را برمی‌گرداند، اما گاهی اوقات برنامه فرض می‌کند Display APIs محدوده برنامه را برمی‌گرداند، که منجر به مشکلات UI می‌شود.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 View API های مورد استفاده در برنامه را مجبور می کند تا محدوده برنامه را برگرداند. View APIs محدوده‌های منطقی ناحیه نمایش را برمی‌گرداند، اما گاهی اوقات برنامه فرض می‌کند View APIs محدودیت‌های برنامه را برمی‌گرداند، که منجر به مشکلات UI می‌شود.
سازگار با دوربین OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 چرخش نیرو را خاموش می کند. به طور پیش‌فرض، وقتی پیش‌نمایش دوربین باز است، همه برنامه‌های دوربین با جهت ثابت به زور چرخش می‌شوند.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 به‌روزرسانی سخت پیش‌فرض اعمال شده هنگام چرخش اجباری پیش‌نمایش دوربین را حذف می‌کند.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 هنگامی که پیش‌نمایش دوربین به زور می‌چرخد، به‌روزرسانی سخت را به تازه‌سازی ملایم تغییر می‌دهد، که به حفظ حالت در طول چرخش نیرو کمک می‌کند. به‌طور پیش‌فرض، زمانی که پیش‌نمایش دوربین به اجبار چرخانده می‌شود، اندروید یک به‌روزرسانی سخت اعمال می‌کند. به‌روزرسانی سخت می‌تواند باعث از دست رفتن وضعیت یا سیاه شدن برنامه‌ها شود، بسته به اینکه برنامه‌ها چگونه حالت قبلی خود را در حافظه پنهان ذخیره کرده‌اند.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 بافر تصویر دوربین جلوی داخلی را برش می دهد. اگر لغو غیرفعال باشد، برش دوربین جلوی داخلی حذف می‌شود و میدان دید پیش‌نمایش دوربین افزایش می‌یابد. به طور پیش‌فرض در برخی از تاشوها (به دستگاه‌های مرجع مراجعه کنید)، هنگام استفاده از دوربین جلوی داخلی، سیستم پیش‌نمایش دوربین همه برنامه‌های دوربین را برش می‌دهد.
متفرقه OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 از سیاه شدن برنامه در هنگام از دست دادن تمرکز برنامه در حالت تقسیم صفحه جلوگیری می کند. برنامه قبل از ترسیم محتوای برنامه منتظر فوکوس می ماند، که می تواند باعث مسدود شدن یا سیاه شدن برنامه شود. لغو به اندروید امکان می‌دهد یک رویداد فوکوس جعلی را به برنامه ارسال کند، که به برنامه سیگنال می‌دهد تا دوباره شروع به ترسیم محتوا کند.

FORCE_RESIZE_APP

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

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

در مانیفست برنامه، یا مشخصه android:resizeableActivity روی true یا برای پشتیبانی از تغییر اندازه در حین غیرفعال کردن حالت چند پنجره ای با android:resizeableActivity=false ، پرچم ابرداده android.supports_size_changes را روی true تنظیم کنید.

نحوه بهینه سازی اپلیکیشن ها

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

نحوه غیرفعال کردن یا انصراف از لغو

پرچم ویژگی PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES را روی false تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

دستورات adb برای تست لغو

برای اعمال لغو و تغییر اندازه برنامه:

adb shell am compat enable FORCE_RESIZE_APP <package>

برای حذف لغو:

adb shell am compat disable FORCE_RESIZE_APP <package>

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

FORCE_NON_RESIZE_APP

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

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

هم ویژگی android:resizeableActivity و هم پرچم ابرداده 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 در سطح فعالیت یا برنامه.

نحوه بهینه سازی اپلیکیشن ها

محدودیت های نسبت ابعاد را در برنامه خود تعیین نکنید. اطمینان حاصل کنید که برنامه شما از اندازه های مختلف صفحه پشتیبانی می کند . از کلاس های اندازه پنجره برای پشتیبانی از طرح بندی های مختلف بر اساس میزان فضایی که برنامه شما روی صفحه نمایش دارد ، استفاده کنید. به API Compose WindowSizeClass مراجعه کرده و API WindowSizeClass را مشاهده کنید .

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

محدودیت نسبت ابعاد را مشخص کنید یا ویژگی Flag PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE را به false تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
  android:value="false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

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

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

تنظیمات برنامه را محدود می کند که نسبت به حداقل ابعاد تعیین شده را برای فعالیت هایی که دارای جهت گیری پرتره هستند ، محدود می کنند. به طور پیش فرض فعال شده و فقط در صورت فعال بودن OVERRIDE_MIN_ASPECT_RATIO نیز عملی می شود.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

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

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

حداقل نسبت ابعاد فعالیت را به یک مقدار متوسط ​​تنظیم می کند (3: 2)

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

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

override_min_aspect_ratio_large

حداقل نسبت ابعاد فعالیت را به یک مقدار بزرگ تنظیم می کند (16: 9)

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

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

override_min_aspect_ratio_to_align_with_split_screen

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

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

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

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

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

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به Override_Min_Aspect_Ratio مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به Override_Min_Aspect_Ratio مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

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

override_any_orientation

غلبه های زیر را قادر می سازد تا هرگونه جهت گیری را نادیده بگیرند:

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

activity:screenOrientation ، یا از API Activity#setRequestedOrientation() استفاده کنید.

نحوه بهینه سازی اپلیکیشن ها

برنامه شما باید از همه جهت گیری ها پشتیبانی کند. تغییر جهت گیری یک تغییر پیکربندی است ، که می تواند از هر دو روش استفاده شود: اجازه می دهد سیستم از بین برود و برنامه را از بین ببرد ، یا مدیریت پیکربندی خود را تغییر می دهد. اگر خودتان تغییرات پیکربندی را مدیریت کنید ، می توان حالت برنامه را با استفاده از ViewModel حفظ کرد. در موارد بسیار محدود ، شما می توانید تصمیم بگیرید که جهت گیری را فقط روی نمایشگرهای کوچک قفل کنید ، اگرچه انجام این کار ممکن است مقیاس نباشد و همچنین به کاربر اجازه دهید برنامه را در صورت لزوم بچرخاند. در نسخه های Android 12L و بالاتر ، جهت گیری ثابت را می توان با پیکربندی دستگاه غلبه کرد. برای کسب اطلاعات بیشتر در مورد استفاده از تغییرات پیکربندی و پشتیبانی از همه جهت گیری ها ، به تغییرات پیکربندی دسته ، نمای کلی ViewModel و جهت گیری برنامه محدود شده در تلفن ها اما در دستگاه های صفحه نمایش بزرگ نیست .

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

ویژگی پرچم PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE را به false تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

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

override_any_orientation_to_user

برنامه را قادر می سازد فضای نمایش موجود را پر کند. محدودیت های جهت گیری ، قابلیت انعطاف پذیری و نسبت ابعاد مشخص شده در مانیفست برنامه را تحت الشعاع قرار می دهد. همچنین هرگونه تماس به Activity#setRequestedOrientation() را نادیده می گیرد.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

  • android:screenOrientation Attribute را تنظیم نکنید ، یا ویژگی را روی "user" تنظیم کنید.

  • android:resizeableActivity Attribute را به true تنظیم کنید.

  • در صفحه های کوچک ، برای پشتیبانی از تغییر مکان در هنگام غیرفعال کردن حالت Multi -Window با android:resizeableActivity=false ، android.supports_size_changes پرچم ابرداده true تنظیم کنید. minAspectRatio و maxAspectRatio را تنظیم نکنید .

نحوه بهینه سازی اپلیکیشن ها

برنامه خود را فعال کنید تا از همه جهت گیری ها پشتیبانی کند. مشخصات screenOrientation را در مانیفست برنامه خود تنظیم نکنید. پشتیبانی از قابلیت تنظیم برنامه ، حالت چند سیم پیچ و همه نسبت ابعاد نمایش را با تنظیم ویژگی android:resizeableActivity در آشکار برنامه خود به true . به پشتیبانی از اندازه های مختلف صفحه مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

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

override_undefined_orientation_to_portrait

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

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

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

override_undefined_orientation_to_nosensor

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

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

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

override_landscape_orientation_to_reverse_landscape

جهت گیری ReverselandScape را برای کلیه فعالیت های موجود در بسته فعال می کند. مگر در مواردی که Override_Any_Orientation فعال شود ، از Override فقط درصورتی استفاده می شود که هیچ جهت گیری ثابت دیگری توسط فعالیت مشخص نشده باشد.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

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

override_orientation_only_for_camera

محدودیت های override_undefined_orientation_to_portrait ، override_undefined_orientation_to_nosensor ، و override_landscape_orientation_to_landscape overrids برای اینکه فقط در هنگام فعال بودن اتصال دوربین اثر بگذارد.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه بهینه سازی اپلیکیشن ها

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

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

override_use_display_landscape_natural_orientation

هنگام تحقق شرایط زیر ، جهت گیری نمایش را به جهت گیری طبیعی چشم انداز محدود می کند:

  • فعالیت تمام صفحه است
  • از Propertiplate Component PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE خودداری کنید
  • سازنده دستگاه تنظیم درخواست جهت گیری برای نمایشگر فعال است
  • جهت گیری طبیعی صفحه نمایش منظره است

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.

نحوه بهینه سازی اپلیکیشن ها

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Property Flag PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE را به false تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

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

override_enable_compat_ignore_requested_orientation

خط مشی سازمانی را که به روزرسانی جهت گیری برنامه را در پاسخ به Activity#setRequestedOrientation() در هنگام راه اندازی مجدد برنامه یا دارای یک درمان با دوربین فعال ، امکان پذیر می کند.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

Propertial Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION true تنظیم کنید.

نحوه بهینه سازی اپلیکیشن ها

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Properties Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION را تنظیم false .

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

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

override_enable_compat_ignore_orientation_request_when_loop_detected

خط مشی سازگاری را که در پاسخ به فعالیت برنامه فراخوانی برنامه Activity#setRequestedOrientation() بیش از دو بار در یک ثانیه در صورت عدم فعالیت در یک فعالیت برای جهت گیری ثابت ، از جهت گیری درخواست شده برنامه استفاده می کند ، امکان پذیر می کند.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.

نحوه بهینه سازی اپلیکیشن ها

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Property Flag PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED to false را تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
  android:value="false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

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

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

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

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

قابل اجرا نیست. مشکل باید در منطق برنامه حل شود.

نحوه بهینه سازی اپلیکیشن ها

به OVERRIDE_ANY_ORIENTATION مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

بدون امتناع اگر برنامه با دستگاهی که تولید کننده دستگاه را دارد ، تنظیم درخواست جهت گیری را فعال نمی کند ، غیرفعال کردن می تواند خطرناک باشد. برای غیرفعال کردن Override با روابط توسعه دهنده Android تماس بگیرید.

پرچم های دارایی برای تنظیم نادیده گرفتن

هیچ پرچم ملک برای این غلبه وجود ندارد.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

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

Never_sandbox_display_apis

بسته ها را مجبور می کنند که هرگز دارای Display API برای فعالیت حالت سازگاری یا اندازه سازگاری با جعبه استفاده شوند. API های Display همچنان محدودیت های منطقه نمایش را ارائه می دهند.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

با تنظیم android:resizeableActivity Attribute به true یا android.supports_size_changes پرچم ابرداده به true اعلام کنید.

نحوه بهینه سازی اپلیکیشن ها

برنامه هایی که اعلام می کنند کاملاً قابل انعطاف هستند ، هرگز نباید به اندازه صفحه نمایش عناصر UI متکی باشند. برنامه خود را به API های Up -to -Date که WindowMetrics ارائه می دهد ، مهاجرت کنید. اگر از JetPack Compose استفاده می کنید ، از API WindowSizeClass استفاده کنید تا UI را بر اساس میزان صفحه صفحه نمایش در صفحه نمایش فعلی ترسیم کنید. کلاسهای اندازه پنجره را ببینید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

بدون امتناع از API های مستهلک مهاجرت کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

هیچ پرچم ملک برای این غلبه وجود ندارد.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

برای حذف نادیده گرفتن:

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

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

Always_Sandbox_Display_apis

بسته ها را مجبور می کند که همیشه بدون توجه به حالت پنجره ، ماسهبازی API Display داده شود. API های Display همیشه مرزهای برنامه را ارائه می دهند.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

با تنظیم android:resizeableActivity ویژگی به false یا android.supports_size_changes پرچم ابرداده را به false اعلام کنید.

نحوه بهینه سازی اپلیکیشن ها

برنامه هایی که اعلام می کنند کاملاً قابل انعطاف هستند ، هرگز نباید به اندازه نمایش عناصر UI متکی باشند. برنامه خود را از API های مستهلک به API های Up -to -Date که WindowMetrics را ارائه می دهد ، مهاجرت کنید. به WindowMetricsCalculator مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

بدون امتناع از API های مستهلک مهاجرت کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

هیچ پرچم ملک برای این غلبه وجود ندارد.

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

برای حذف نادیده گرفتن:

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

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

Override_sandbox_view_bounds_apis

بسته ها را به Sandbox مجبور می کند API های View زیر را به مرزهای فعالیت:

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

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

نحوه بهینه سازی اپلیکیشن ها

برنامه ها باید با در نظر گرفتن امکان استفاده از جعبه نامه و حالت چند پنجره برای برنامه ، از API های View استفاده کنند. به WindowMetricsCalculator مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Properties Flag PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS را به false تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
  android:value="false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

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

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

چرخش نیرو را غیرفعال می کند. تجربه کاربر را در برخی از برنامه ها بهبود می بخشد.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

Property Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION را به false تنظیم کنید.

نحوه بهینه سازی اپلیکیشن ها

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

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Property Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION true تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
  android:value="true|false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن ، که چرخش نیرو را از بین می برد:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

برای حذف نادیده گرفتن ، که اجازه می دهد چرخش نیرو اتفاق بیفتد:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

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

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

بعد از چرخش نیرو ، فعالیت را غیرفعال می کند. تجربه کاربر را بهبود می بخشد در هنگام تازه کردن باعث از بین رفتن حالت در برنامه ها می شود.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

Property Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH false تنظیم کنید.

نحوه بهینه سازی اپلیکیشن ها

به Override_Camera_Compat_Disable_Force_Rotation مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Property Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH true تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
  android:value="true|false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن ، که باعث تازه سازی فعالیت می شود:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

برای حذف نادیده گرفتن ، که امکان تازه سازی فعالیت را فراهم می کند:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

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

override_camera_compat_enable_refresh_via_pause

بسته های مورد استفاده خود را برای انجام تازه فعالیت با استفاده از onResume()onPause()onResume() به جای onResume()onStop()onResume() پس از چرخش نیروی سازگاری دوربین ایجاد می کند.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

Property Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE true تنظیم کنید.

نحوه بهینه سازی اپلیکیشن ها

به Override_Camera_Compat_Disable_Force_Rotation مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Property Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE را به false تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
  android:value="true|false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

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

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

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

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

Property Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT true تنظیم کنید.

نحوه بهینه سازی اپلیکیشن ها

به Override_Camera_Compat_Disable_Force_Rotation مراجعه کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Property Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT را به false تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
  android:value="true|false"/>

دستورات adb برای تست لغو

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

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

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

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

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

override_disable_media_projection_single_app_option

از انتخاب برنامه ها از اشتراک گذاری صفحه برنامه جلوگیری می کند (به پیش بینی رسانه مراجعه کنید). هنگامی که برنامه ها از API createConfigForDefaultDisplay() برای مجبور کردن ضبط کامل در صفحه و به خطر انداختن حریم شخصی کاربر با افشای محتوای اعلان ها ، که با صفحه نمایش کامل اما به اشتراک گذاری صفحه برنامه ، و همه برنامه ها بدون در نظر گرفتن حالت پنجره ، به خطر می افتد ، اجرا می شود.

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

اجازه دهید رفتار پیش فرض پیش فرض رسانه (در Android 14 ، API سطح 34 ، با createScreenCaptureIntent() ) اجرا شود ، که کاربران را قادر می سازد تصمیم بگیرند که آیا بدون در نظر گرفتن حالت پنجره ، صفحه نمایش کامل یا یک پنجره برنامه واحد را به اشتراک بگذارند. یا با MediaProjectionConfig createScreenCaptureIntent(MediaProjectionConfig) تماس با createConfigForUserChoice() تماس بگیرید.

نحوه بهینه سازی اپلیکیشن ها

به کاربران اجازه دهید انتخاب کنند که آیا کل نمایشگر دستگاه یا یک پنجره برنامه را در طول طرح ریزی رسانه به اشتراک می گذارند ، که از نظر Android 14 رفتار پیش فرض است.

برای پشتیبانی از حالت Multi -Window ، برنامه خود را قابل ذخیره سازی ( resizeableActivity="true" ) کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

به دلیل جدی بودن حریم شخصی کاربر ، برنامه شما نمی تواند از این نادیده گرفته شود یا از این امر خودداری کند.

پرچم های دارایی برای تنظیم نادیده گرفتن

هیچ یک.

دستورات adb برای تست لغو

برای اعمال Override ، که انصراف برنامه را از اشتراک گذاری جزئی از صفحه نمایش لغو می کند (یعنی اشتراک گذاری صفحه جزئی را امکان پذیر می کند):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

برای حذف Override ، که اجازه می دهد برنامه از اشتراک گذاری جزئی از صفحه خارج شود:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

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

override_enable_compat_fake_focus

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

چگونه برنامه ها می توانند نتیجه مشابهی را بدست آورند

Property Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS true تنظیم کنید.

نحوه بهینه سازی اپلیکیشن ها

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

اگر موتور بازی Unity را اجرا می کنید ، به نسخه 2019.4.40 یا بعد از آن ارتقا دهید و بازی خود را دوباره وارد کنید. گزینه Resizable Window را در تنظیمات Android Player بررسی کنید.

نحوه غیرفعال کردن یا انصراف از نادیده گرفتن

Properties Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS را به false تنظیم کنید.

پرچم های دارایی برای تنظیم نادیده گرفتن

<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
  android:value="true|false"/>

دستورات adb برای تست لغو

برای اعمال نادیده گرفتن:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

برای حذف نادیده گرفتن:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

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

منابع اضافی