تحضير التطبيق لنظام Android Q. الجزء 2

تم إعداد ترجمة المقال خصيصًا لطلاب الدورة "Android-developer. بالطبع الأساسية . " نذكرك أيضًا بأننا مستمرون في التسجيل في الدورة المتقدمة "Speciality Android-developer"




يمكن العثور على الخصوصية والأمان في الجزء الأول من المقالة.

2) تجارب المستخدم


أ) إيماءات الملاحة




في Android Q ، حاولت Google دمج جميع إيماءات التنقل مع نظام إيماءات التنقل الجديد ، والذي حل محل شريط التنقل العائم (الخلف ، المنزل ، والتطبيقات الحديثة).

  • ما الذي يؤثر: إذا كان التطبيق الخاص بك يحتوي على إيماءات ، فقد يتعارض مع إيماءات النظام. سيؤثر هذا على جميع التطبيقات التي تعمل على Android Q (بغض النظر عن SDK الهدف) ، حيث سيتم معالجة إيماءات النظام أولاً.
  • الطريقة الموصى بها: نظرًا لأن شريط التنقل العائم قد اختفى فعليًا ، فمن المستحسن أن تستفيد بالكامل من مساحة الشاشة الجديدة المتاحة وأن تزود المستخدمين بتأثير غامرة.

لإنشاء تأثير غامرة ، يجب أن تظهر التطبيقات خلف شريط الحالة وشريط التنقل. أولاً ، اجعل شريط الحالة وشريط التنقل شفافين.

<style name="AppTheme"> ...... <item name="android:navigationBarColor">@android:color/transparent</item> <!-- Optional, but recommended for full edge-to-edge rendering --> <item name="android:statusbarColor">@android:color/transparent</item> </style> 

بعد ذلك ، نجعل عرض Activity/View العرض في وضع ملء الشاشة:

 view.systemUiVisibility = //Layout as if the navigation bar was hidden View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or //Layout as if the status bar was hidden View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or //Layout at its most extreme View.SYSTEM_UI_FLAG_LAYOUT_STABLE 



FAB (زر الحركة العائمة) مغطى بشريط تنقل عائم. يتم تضمين شريط التنقل العائم للوضوح.

الآن وقد تم عرض التطبيق في وضع ملء الشاشة خلف مكونات النظام (الشفافة) ، من الممكن أن يتم حظر نوع ما من مكون التطبيق التفاعلي بواسطة واجهة مستخدم النظام. لحل هذه المشكلة ، استخدم Insets.

Insets عبارة عن مجموعة من القيم التي تخبرنا مقدار نقل العرض حتى لا تتعارض مع واجهة مستخدم النظام. يتم توفير هذه المعلومات بواسطة فئة WindowInset . بدءًا من واجهة برمجة التطبيقات (API) 20 ، يوفر Android للمطورين نظام System Window Insets ، الذي يخبرك بكمية مكونات نظام الفضاء (مثل شريط التنقل العائم وشريط الحالة). يمكن استخدام هذه المعلومات لنقل العرض التفاعلي بحيث ينقر المستخدم عليه ، وليس على واجهة مستخدم النظام.

 root.setOnApplyWindowInsetsListener { _, insets -> val fabLp = fab.layoutParams as CoordinatorLayout.LayoutParams fabLp.bottomMargin = fabOriginalBottomMargin + insets.systemWindowInsetBottom fab.layoutParams = fabLp insets.consumeSystemWindowInsets() } 

من أجل FAB ، قم بتعيين موزع رسائل WindowsInsets وتطبيق الإطار السفلي الداخلي على أنه المسافة البادئة السفلية.

وبالمثل ، بدءًا من Android Q ، يوفر النظام مجموعات داخلية لإيماءات التنقل لنقل طرق العرض المتبادلة بحيث لا تتعارض مع إيماءات النظام. يتم توفيرها من خلال Insets.getSystemGestureInsets ()


يتم تمييز مناطق إيماءات النظام باللون الأصفر.

ولكن ماذا لو كنا لا نريد نقل العرض ونريد وضع بعض المحتوى في مناطق الإيماءات التي قد تتعارض مع التطبيق؟ في هذه السيناريوهات ، يمكن للتطبيق تحديد المناطق التي سيتعامل فيها التطبيق أولاً مع حدث اللمس ، بدلاً من إيماءات النظام. يمكن القيام بذلك بتمرير List< Rect > إلى View.setSystemGestureExclusionRects () API المتوفرة في Android Q. تتوفر هذه الطريقة أيضًا في ViewCompat مع androidx.core:core:1.1.0 .

  • مطبات: يمكنك رفض معالجة إيماءات الظهر فقط. حدود لفتة "المنزل" محجوزة ولا يمكن إعادة تعريفها. هذا لأنه لا يوجد سوى طريقة واحدة للخروج من التطبيق. إذا كان التطبيق الخاص بك يتعارض مع لفتة "الوطن" ، فاستخدم WindowInsets.getMandatorySystemGestureInsets() للحصول على حدوده وتحويل طريقة العرض الخاصة بك.

ب) موضوع الظلام


خلال العام الماضي ، رأينا العديد من التطبيقات تبدأ في دعم المظاهر المظلمة. يضيف Android Q رمز التبديل هذا إلى إعدادات النظام.

يمكن للمستخدم تمكين السمة المظلمة بثلاث طرق:

  1. عنصر جديد في إعدادات النظام (الإعدادات -> العرض -> السمة)
  2. عنصر جديد في الإعدادات السريعة
  3. اعتمادًا على الشركة المصنعة ، يمكن تشغيله من خلال وضع توفير الطاقة.

لدعم التكوين على مستوى النظام لـ Dark Theme ، يجب أن يرث السمة الافتراضية للتطبيق الخاص بك من سمة DayNight. هذا يربط السمة الرئيسية للتطبيق بأعلام الوضع الليلي التي يتحكم فيها النظام. يعمل هذا من خلال استخراج الموارد من مجلدات التصفيات night .

 <!--App Compat Style--> <style name="AppTheme" parent="Theme.AppCompat.DayNight"> <!--Material Components--> <style name="AppTheme" parent="Theme.MaterialComponents.DayNight"> 

إذا نظرت داخل أنماط App Compat ، ستلاحظ أن سمة DayNight تشير إلى AppCompat Light في التكوين الافتراضي و AppCompat في التكوين الليلي.

 <!--values/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat.Light"> <!--values-night/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat"> 

إذا كنت ترغب في منح المستخدمين القدرة على التحكم في السمة من داخل التطبيق ، يمكنك الاتصال بـ AppCompatDelegate.setDefaultNightMode () ، والذي يقبل أحد الأوضاع الأربعة:

  1. MODE_NIGHT_YES - إظهار المظهر المظلم
  2. MODE_NIGHT_NO - عرض موضوع مشرق
  3. MODE_NIGHT_FOLLOW_SYSTEM - اتبع إعدادات النظام
  4. MODE_NIGHT_AUTO_BATTERY - MODE_NIGHT_AUTO_BATTERY مظلمة عندما ينتقل الجهاز إلى وضع توفير الطاقة.

  • المزالق:

أ) لا ترميز الألوان. إذا كانت هناك ألوان مضغوطة في ملفات التخطيط ، فهذه هي مكالمة إيقاظ. استبدالها بروابط إلى color . أفضل: استخدم السمات للإشارة إلى الألوان.

ب) التحقق من الصور وتزويدها بموارد بديلة كجزء من المصنف night .

ج) لا ينبغي أن يكون هناك ألوان مطلية بالورق في الرسومات المتجهة. استخدم tint نمط الموارد ناقلات مع اللون الصحيح.

د) تأكد من أن جميع موارد color لها بدائل مقابلة في المجلد night ( values-night/colors.xml )

هـ) إذا كان التطبيق يستخدم RemoteViews للإشعارات أو التطبيقات المصغّرة ، فتأكد أيضًا من اختبارها. من الجيد إذا كان التطبيق يستخدم أنماط الإشعارات الافتراضية ، ومنذ ذلك الحين سيقوم النظام بمعالجتها.

f) يتم استدعاء تغيير التكوين لنظام uiMode كلما كان الجهاز يتحول بين الوضع العادي والظلام. يمكن للمستخدم القيام بذلك يدويًا أو تنشيط وضع توفير الطاقة. إذا لم يعالج التطبيق تغييرات التكوين بشكل صحيح ، تفقد واجهة المستخدم السياق عندما ينتقل الجهاز بين الوضعين العادي والظلام ، لأن الأنشطة المرئية وشظاياها يتم إتلافها وإعادة إنشائها. لذلك ، حتى إذا كانت واجهة المستخدم مقفلة في نفس الاتجاه ، فأضف دعمًا لتغييرات التكوين. بالإضافة إلى ذلك ، إذا كان التطبيق يدير تغييرات التكوين يدويًا من خلال android:configChanges ، فهناك احتمال كبير أنك سترغب أيضًا في إدارة uiMode . على سبيل المثال ، إذا كان التطبيق يستخدم التشغيل المستمر (مشغل فيديو) ، فقد لا يرغب في مقاطعة التشغيل لمجرد أن الجهاز قد تحول بين الوضع العادي والظلام.

قدم Android Q أيضًا العديد من الأشياء الأخرى التي لم أناقشها بالتفصيل ، مثل لوحة الإعدادات ، واجهة AudioPlaybackCapture API الجديدة (تتيح واجهة برمجة التطبيقات للتطبيقات نسخ الصوت الذي تشغله تطبيقات أخرى. تشبه هذه الوظيفة التقاط الشاشة ، ولكن بالنسبة للصوت).

أخيرًا ، يتضمن Android Q قائمة محدثة بالواجهات المقيدة بخلاف SDK ، والتي قد يتم رفض الوصول إليها في النهاية من Android SDK. يمكنك العثور على قائمة بانتهاكاتك في وحدة التحكم باللعب ضمن قسم "تقرير ما قبل الإطلاق".

هذا كل شيء. إذا شعرت أن هناك شيئًا مهمًا لم يرد ذكره في المقالة ، فأخبرني في التعليقات أدناه. ؛-)

Source: https://habr.com/ru/post/ar464825/


All Articles