جعبه ابزار 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
نمی توان در داخل یک برگه استفاده کرد زیرا دارای روش جستجوی فوکوس نادیده گرفته شده است که از بازگشت فوکوس به برگه جلوگیری می کند.