Leanback 界面工具包库

使用 Compose 构建更出色的应用
使用适用于 Android TV OS 的 Jetpack Compose,只需极少的代码即可创建精美的界面。
<ph type="x-smartling-placeholder"></ph> Compose for TV →

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。唯一的区别是您现在可以 传入 PresenterPresenterSelector。 这适用于您通常使用 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"

然后,使用 LeanbackTabLayoutLeanbackViewPager 实现标签页,方法是 遵循现有的 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)。为解决此问题, 必须覆盖焦点搜索;例如,使用 RowsSupportFragmentBrowseSupportFragment 无法在标签页中使用,因为它具有被覆盖的焦点搜索方法,该方法将 可防止焦点移回该标签页。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
图 1.向上方向键可将焦点移至标签页而非上一项。