Leanback UI 工具包提供了一些特定于电视的库, 专为 Android TV OS 开发的应用。这些库包括:
- Leanback 库:提供界面模板, 从而简化 Android TV 应用的创建过程。
- Leanback 偏好设置 :提供偏好设置和设置屏幕,这些屏幕与 平台,但可以设置与您的应用匹配的主题。
- Leanback Paging 库:支持
适用于
ObjectAdapters
的 AndroidX 分页模型,通常与 Leanback 模板。 - Leanback Tabs 库:支持 Tabbed 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
:
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 Tabs 库
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 UI 工具包。
将焦点从标签页移至顶部
当布局高度大于屏幕高度且您按方向键时
向上按钮,控件会移回标签页,而不是留在 fragment 内
并导航到其上一项(参见图 1)。为解决此问题,
必须覆盖焦点搜索;例如,使用
RowsSupportFragment
。
BrowseSupportFragment
无法在标签页中使用,因为它具有被覆盖的焦点搜索方法,该方法将
可防止焦点移回该标签页。