بایدها و نبایدهای تطبیقی

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

لیست کوتاهی از تنظیمات پیکربندی و APIها شما را قادر می سازد برنامه های تطبیقی ​​بسازید. اما برخی تنظیمات و APIهای قدیمی با برنامه های تطبیقی ​​ناسازگار هستند و باید از آنها اجتناب شود.

قابلیت تغییر اندازه

برنامه‌های تطبیقی ​​از قابلیت تغییر اندازه برنامه و حالت چند پنجره‌ای پشتیبانی می‌کنند.

ویژگی resizeableActivity عناصر مانیفست <activity> و <application> حالت چند پنجره‌ای را در Android 11 (سطح API 30) و پایین‌تر فعال یا غیرفعال می‌کند. در Android 12 (سطح API 31) و بالاتر، صفحه‌های بزرگ بدون در نظر گرفتن ویژگی از حالت چند پنجره‌ای پشتیبانی می‌کنند. برای اطلاعات بیشتر، به پشتیبانی از حالت چند پنجره ای مراجعه کنید.

✓ انجام دهید

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

اگر برنامه شما سطوح API کمتر از 24 را هدف قرار می دهد، resizeableActivity="true" را تنظیم کنید. در غیر این صورت، آن را فراموش کنید - این به طور پیش فرض در اندروید 7.0 (سطح API 24) و بالاتر true است.

✗ نکن

resizeableActivity="false" را برای هیچ سطح API تنظیم نکنید. برنامه خود را از موارد استفاده که شامل حالت چند پنجره ای است مستثنی نکنید.

جهت گیری

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

تنظیم مانیفست screenOrientation جهت فعالیت را محدود می کند.

✓ انجام دهید

تنظیمات screenOrientation را از مانیفست برنامه خود حذف کنید.

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

✗ نکن

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

برنامه‌های دارای جعبه نامه در Google Play برای رایانه‌های لوحی، تاشوها و دستگاه‌های ChromeOS در معرض کاهش قابلیت شناسایی هستند.

نسبت ابعاد

همانطور که اندازه صفحه و پنجره متفاوت است، نسبت ابعاد آنها نیز متفاوت است - از بلند و باریک، مربع، کوتاه و پهن.

تنظیمات مانیفست minAspectRatio و maxAspectRatio نسبت تصویر برنامه شما را به مقادیر کدگذاری شده محدود می‌کند.

✓ انجام دهید

برنامه خود را طوری تنظیم کنید که بدون توجه به ابعاد نسبی با نمایشگر مطابقت داشته باشد.

تنظیمات minAspectRatio و maxAspectRatio را از مانیفست برنامه خود حذف کنید. یا اطمینان حاصل کنید که برنامه شما قابل تغییر اندازه است و نسبت ابعاد از خودش مراقبت می کند (بخش قابلیت تغییر اندازه را ببینید).

✗ نکن

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

در اندروید 14 (سطح API 34) و بالاتر، کاربران می‌توانند نسبت ابعاد برنامه را لغو کنند تا برنامه‌های جعبه نامه را گسترش دهند تا فضای نمایش موجود را پر کنند. به حالت سازگاری دستگاه مراجعه کنید.

اندازه پنجره

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

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

✓ انجام دهید

اندازه پنجره برنامه خود را بر اساس کلاس های اندازه پنجره ارزیابی کنید.

برای تعیین کلاس اندازه پنجره، از تابع سطح بالای currentWindowAdaptiveInfo() کتابخانه Compose Material 3 Adaptive استفاده کنید. برای اطلاعات بیشتر، به ساخت برنامه‌های تطبیقی ​​مراجعه کنید.

✗ نکن

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

API های منسوخ شده

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

✓ انجام دهید

از WindowManager#getCurrentWindowMetrics() و WindowMetrics#getBounds() برای دریافت اندازه پنجره برنامه استفاده کنید. برای بدست آوردن چگالی نمایشگر از WindowMetrics#getDensity() استفاده کنید.

✗ نکن

برای تعیین اندازه پنجره از APIهای Display منسوخ زیر استفاده نکنید:

  • getSize() : منسوخ شده در اندروید 11 (سطح API 30)
  • getMetrics() : در Android 11 منسوخ شده (سطح API 30)
  • getRealSize() : در اندروید 12 منسوخ شده است (سطح API 31)
  • getRealMetrics() : در Android 12 منسوخ شده (سطح API 31)

نوشتن

Jetpack Compose برای توسعه رابط کاربری تطبیقی ​​طراحی شده است. بدون XML، بدون فایل های طرح بندی، بدون واجد شرایط منبع. فقط کامپوزیشن‌های بدون حالت مبتنی بر Kotlin مانند Column ، Row و Box که رابط کاربری شما را توصیف می‌کنند، و اصلاح‌کننده‌هایی مانند offset ، padding ، و size که رفتار را به عناصر UI اضافه می‌کنند.

✓ انجام دهید

ساخت با Compose. با آخرین ویژگی ها و نسخه ها به روز باشید.

✗ نکن

به تکنولوژی قدیمی تکیه نکنید. اجازه ندهید برنامه شما منسوخ شود.

نوشتن کتابخانه تطبیقی ​​Material 3

کتابخانه Compose Material 3 Adaptive مؤلفه ها و API هایی را ارائه می دهد که توسعه برنامه های تطبیقی ​​را تسهیل می کند.

✓ انجام دهید

از API های زیر برای تطبیق برنامه خود استفاده کنید:

  • NavigationSuiteScaffold : بسته به کلاس اندازه پنجره برنامه، بین نوار پیمایش و ریل پیمایش جابه جا می شود.
  • ListDetailPaneScaffold : طرح بندی متعارف لیست جزئیات را پیاده سازی می کند. طرح بندی را با اندازه پنجره برنامه تطبیق می دهد.
  • SupportingPaneScaffold : طرح بندی متعارف پانل پشتیبان را پیاده سازی می کند.
✗ نکن

چرخ را دوباره اختراع نکنید دستاوردهای بهره وری توسعه دهندگان ارائه شده توسط همه کتابخانه های Jetpack Compose را از دست ندهید.

طرح بندی ها

کاربران انتظار دارند برنامه‌ها با محتوای تکمیلی یا کنترل‌های بهبودیافته، از فضای نمایشی موجود نهایت استفاده را ببرند.

برنامه‌های تطبیقی ​​طرح‌بندی‌ها را بر اساس تغییرات نمایشگر، به‌ویژه، تغییر در اندازه پنجره برنامه یا تغییر وضعیت دستگاه بهینه می‌کنند.

✓ انجام دهید

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

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

✓ انجام دهید: فهرست و جزئیات فعالیت‌های سازمان‌دهی شده در یک طرح دو صفحه‌ای.
✗ نکن

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

✗ Don't: طرح بندی برای پر کردن پنجره در حال گسترش کشیده شده است.

دستگاه های ورودی

کاربران فقط از صفحه نمایش لمسی برای تعامل با برنامه ها استفاده نمی کنند.

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

✓ انجام دهید

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

از کتابخانه Jetpack Material 3 استفاده کنید تا کاربران بتوانند با استفاده از قلم در هر جزء TextField بنویسند.

✗ نکن

روش های ورودی جایگزین را غیرممکن نکنید. مسائل دسترسی را معرفی نکنید.

خلاصه

  • برنامه خود را با Compose و کتابخانه Material 3 Adaptive بسازید
  • طرح‌بندی پایه در کلاس‌های اندازه پنجره
  • طرح بندی های چند صفحه ای ایجاد کنید
  • برنامه خود را قابل تغییر اندازه کنید
  • هرگز جهت فعالیت را قفل نکنید
  • نسبت تصویر را محدود نکنید
  • پشتیبانی از ورودی غیر از لمس
  • از API های منسوخ شده خودداری کنید

✓ آنچه را که کاربران انتظار دارند انجام دهید : برنامه خود را برای تنوع دستگاه‌هایی که مردم هر روز به آن‌ها تکیه می‌کنند بهینه کنید.

✗ منتظر نباش همین امروز شروع کنید!