کتابخانه های جعبه ابزار UI Leanback

با Compose بهتر بسازید
با استفاده از Jetpack Compose برای سیستم عامل Android TV، رابط‌های کاربری زیبا با حداقل کد ایجاد کنید.

جعبه ابزار Leanback UI تعدادی کتابخانه خاص تلویزیون را به صورت انحصاری برای برنامه های توسعه یافته برای سیستم عامل Android TV ارائه می دهد. این کتابخانه ها شامل موارد زیر است:

  • کتابخانه Leanback : الگوهای رابط کاربری را ارائه می دهد که ایجاد برنامه های Android TV را ساده می کند.
  • کتابخانه Leanback Preferences : صفحه‌های تنظیمات برگزیده و تنظیماتی را ارائه می‌دهد که با پلتفرم سازگار است، اما می‌تواند با برنامه شما مطابقت داشته باشد.
  • کتابخانه Leanback Paging : از مدل صفحه‌بندی AndroidX برای ObjectAdapters که معمولاً با الگوهای Leanback استفاده می‌شوند، پشتیبانی می‌کند.
  • کتابخانه Leanback Tabs : از ناوبری برگه‌ها در Android TV پشتیبانی می‌کند.

کتابخانه صفحه‌بندی Leanback

صفحه‌بندی در جعبه ابزار Leanback UI مانند کتابخانه AndroidX Paging 3 عمل می‌کند، که افزودن صفحه‌بندی به RecyclerView.Adapter را ساده می‌کند. با کتابخانه Leanback Paging، آداپتوری که در معرض نمایش قرار می‌گیرد معمولاً یک ObjectAdapter است، بنابراین کتابخانه پشتیبانی صفحه‌بندی را به ObjectAdapter اضافه می‌کند.

برای افزودن یک آداپتور صفحه‌بندی به برنامه خود، ابتدا وابستگی کتابخانه را به پروژه خود اضافه کنید:

implementation "androidx.leanback:leanback-paging:$version"

سپس مستندات Paging 3 را با استفاده از androidx.leanback.paging.PagingDataAdapter به جای androidx.paging.PagingDataAdapter دنبال کنید. تنها تفاوت این است که شما اکنون می توانید در یک Presenter یا PresenterSelector عبور کنید. این کار در هر جایی که شما معمولاً از یک ObjectAdapter استفاده می کنید، مانند ListRow کار می کند:

کاتلین

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)

جاوا

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 Tabs

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

وابستگی کتابخانه را به پروژه خود اضافه کنید:

implementation "androidx.leanback:leanback-tab:$version"

سپس با پیروی از راهنمای ViewPager موجود، برگه ها را با استفاده از LeanbackTabLayout و LeanbackViewPager پیاده سازی کنید. توجه داشته باشید که LeanbackViewPager مبتنی بر ViewPager است نه ViewPager2 .

نمونه زیر است:

کاتلین

val leanbackTabLayout = findViewById<LeanbackTabLayout>(R.id.tab_layout)
val leanbackViewPager = findViewById<LeanbackViewPager>(R.id.view_pager)

leanbackViewPager.setAdapter(adapter)
leanbackTabLayout.setupWithViewPager(leanbackViewPager)

جاوا

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 UI استفاده کنید.

تمرکز حرکت از زبانه به بالا

هنگامی که ارتفاع طرح‌بندی بیشتر از ارتفاع صفحه است و دکمه D-pad up را فشار می‌دهید، کنترل به جای ماندن در داخل قطعه و پیمایش به یک مورد بالای آن، به برگه بازمی‌گردد (شکل 1 را ببینید). برای رسیدگی به این مشکل، محتویات داخل قطعه باید جستجوی فوکوس را لغو کنند. برای مثال، از RowsSupportFragment استفاده کنید. BrowseSupportFragment نمی توان در داخل یک برگه استفاده کرد زیرا دارای روش جستجوی فوکوس نادیده گرفته شده است که از بازگشت فوکوس به برگه جلوگیری می کند.

شکل 1. دکمه D-pad up فوکوس را به جای آیتم قبلی به زبانه منتقل می کند.