توفر مجموعة أدوات واجهة المستخدم Leanback بعض المكتبات الخاصة بالتلفزيون حصريًا للتطبيقات التي تم تطويرها لنظام التشغيل Android TV. وتتضمّن هذه المكتبات ما يلي:
- مكتبة Leanback: توفّر نماذج لواجهة المستخدم تبسّط إنشاء تطبيقات Android TV.
- مكتبة تفضيلات Leanback: توفر الإعدادات المفضّلة وشاشات الإعدادات التي تتوافق مع النظام الأساسي ولكن يمكن تصميمها لتناسب تطبيقك.
- مكتبة ترتيب الصفحات في Leanback: تتوافق مع نموذج الصفحات في AndroidX لـ
ObjectAdapters
، والذي يشيع استخدامه مع نماذج Leanback. - مكتبة Leanback Tabs: تدعم التنقل المبوَّب على Android TV.
مكتبة Leanback Paging
تعمل عملية التنقل داخل مجموعة أدوات واجهة المستخدم Leanback بالطريقة نفسها التي تعمل بها مكتبة
Paging 3 على AndroidX، ما
يبسط عملية إضافة الصفحات إلى RecyclerView.Adapter
.
باستخدام مكتبة Leanback Paging، يكون المحوِّل الذي يتم كشفه عادةً هو ObjectAdapter
، لذلك تضيف المكتبة إمكانية نقل البيانات إلى ObjectAdapter
.
لإضافة محوّل صفحات على تطبيقك، أضِف أولاً تبعية المكتبة إلى مشروعك:
implementation "androidx.leanback:leanback-paging:$version"
بعد ذلك، اتّبِع
مستندات التقسيم 3 باستخدام
androidx.leanback.paging.PagingDataAdapter
بدلاً من
androidx.paging.PagingDataAdapter
. الفرق الوحيد هو أنه يمكنك الآن
اجتياز Presenter
أو
PresenterSelector
.
يمكن استخدام هذا الخيار في أي مكان تستخدم فيه ObjectAdapter
عادةً، كما هو الحال في ListRow
:
Kotlin
val adapter: PagingDataAdapter<MyItem> = PagingDataAdapter(myPresenter, object : DiffUtil.ItemCallback<MyItem>() { override fun areItemsTheSame( oldItem: MyItem, newItem: MyItem ): Boolean { return oldItem.id === newItem.id } override fun areContentsTheSame( oldItem: MyItem, newItem: MyItem ): Boolean { return oldItem == newItem } }) val header = HeaderItem(headerTitle) val row = ListRow(header, adapter)
Java
PagingDataAdapter<MyItem> adapter = new PagingDataAdapter(myPresenter, new DiffUtil.ItemCallback<MyItem>() { @Override public boolean areItemsTheSame(@NonNull MyItem oldItem, @NonNull MyItem newItem) { return oldItem.getId().equals(newItem.getId()); } @Override public boolean areContentsTheSame(@NonNull MyItem oldItem, @NonNull MyItem newItem) { return oldItem.equals(newItem); } }); HeaderItem header = new HeaderItem(headerTitle); Row row = new ListRow(header, adapter);
مكتبة علامات تبويب Leanback
توفر نماذج مجموعة أدوات واجهة المستخدم Leanback التنقل الجانبي في شاشة التصفح. لإضافة صف من علامات التبويب أفقيًا عبر الجزء العلوي من التطبيق، يمكنك بدلاً من ذلك استخدام علامات تبويب Leanback بدلاً من ذلك.
أضف تبعية المكتبة إلى مشروعك:
implementation "androidx.leanback:leanback-tab:$version"
يمكنك بعد ذلك تنفيذ علامات التبويب باستخدام LeanbackTabLayout
وLeanbackViewPager
من خلال اتّباع دليل ViewPager الحالي. يُرجى العِلم أنّ
LeanbackViewPager
يستند إلى ViewPager
وليس إلى ViewPager2
.
فيما يلي مثال:
Kotlin
val leanbackTabLayout = findViewById<LeanbackTabLayout>(R.id.tab_layout) val leanbackViewPager = findViewById<LeanbackViewPager>(R.id.view_pager) leanbackViewPager.setAdapter(adapter) leanbackTabLayout.setupWithViewPager(leanbackViewPager)
Java
LeanbackTabLayout leanbackTabLayout = findViewById(R.id.tab_layout); LeanbackViewPager leanbackViewPager = findViewById(R.id.view_pager); leanbackViewPager.setAdapter(adapter); leanbackTabLayout.setupWithViewPager(leanbackViewPager);
القيود
مكتبة Leanback Tabs لها قيود في النُسُق التي تدعمها وكيفية التعامل مع حركة التركيز.
المظاهر المتوافقة
لا يتم دعم سوى المظاهر المشتقة من Theme.AppCompat
. TabLayout
يحتوي على قيد لتنفيذ الموضوع، مما يمنع استخدام أي موضوع غير تابع للسمة Theme.AppCompat
. يمكنك أيضًا استخدام مظهر الجسر لمجموعة
أدوات واجهة المستخدم في Leanback.
التركيز على الحركة من علامات التبويب إلى الأعلى
عندما يكون ارتفاع التخطيط أكبر من ارتفاع الشاشة وتضغط على زر "لوحة التحكم للأعلى"،
ينتقل عنصر التحكم مرة أخرى إلى علامة التبويب بدلاً من البقاء داخل الجزء
والانتقال إلى عنصر فوقه (انظر الشكل 1). لمعالجة هذه المشكلة، يجب أن يلغي المحتوى
داخل الجزء بحث التركيز، على سبيل المثال، استخدِم
RowsSupportFragment
.
لا يمكن استخدام BrowseSupportFragment
داخل علامة تبويب لأنّها تتضمن طريقة بحث تم تجاوزها، ما يحول دون عودة التركيز إلى علامة التبويب.