مكتبات أدوات واجهة المستخدم في Leanback

توفر مجموعة أدوات واجهة المستخدم 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 داخل علامة تبويب لأنّها تتضمن طريقة بحث تم تجاوزها، ما يحول دون عودة التركيز إلى علامة التبويب.

الشكل 1. ينقل زر "لوحة التحكم" التركيز إلى علامة تبويب بدلاً من العنصر السابق.