Leanback UI 工具包程式庫

使用 Compose 建構更優質的內容
使用 Jetpack Compose for Android TV OS 以最少的程式碼建立精美的 UI。

Leanback UI 工具包提供部分電視專用的程式庫 專為 Android TV OS 開發的應用程式。這些程式庫包含下列項目:

  • Leanback 程式庫:提供 簡化建立 Android TV 應用程式的程序
  • Leanback 偏好設定 程式庫:提供與瀏覽器版本 但您也可以配合應用程式主題來設計主題。
  • Leanback Paging 程式庫:支援 ObjectAdapters 的 AndroidX 分頁模型,通常會與 Leanback 範本。
  • Leanback 分頁程式庫:支援分頁式 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 分頁媒體庫

Leanback UI 工具包範本可以在 瀏覽畫面。如何橫向新增一列分頁 可以改用 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 分頁庫在支援的主題和焦點方面有限制 物件移動處理即可。

支援的主題

系統僅支援衍生自 Theme.AppCompat 的主題。TabLayout 含有主題強制執行限制,可防止任何非上層主題 (共 Theme.AppCompat 個)。您也可以使用 Leanback UI 工具包。

焦點從分頁移至頂端

當版面配置高度大於螢幕高度時,按下 D-Pad 向上按鈕,控制項會移回分頁,而不會留在片段中 然後前往上方的項目 (如圖 1 所示)。為處理這個問題 片段中必須覆寫聚焦搜尋。舉例來說,請使用 RowsSupportFragmentBrowseSupportFragment敬上 無法在分頁中使用,因為其中包含覆寫的焦點搜尋方法, 這樣就能避免焦點移回分頁。

圖 1.D-Pad 的向上按鈕可將焦點移至分頁,而非上一個項目。