非推奨の Leanback UI ツールキットは、Android TV OS 向けに開発されたアプリ専用の TV 固有のライブラリを提供します。これらのライブラリには次のものが含まれます。
- Leanback ライブラリ: Android TV アプリの作成を簡素化する UI テンプレートを提供します。
- Leanback Preferences ライブラリ: プラットフォームと一貫性があり、アプリに合わせてテーマ設定できる設定画面と設定を提供します。
- Leanback Paging ライブラリ: Leanback テンプレートでよく使用される
ObjectAdapters
の AndroidX ページング モデルをサポートします。 - Leanback Tabs ライブラリ: Android TV でのタブ付きナビゲーションをサポートします。
Leanback ページング ライブラリ
Leanback UI ツールキット内のページングは、AndroidX Paging 3 ライブラリと同じように機能します。これにより、RecyclerView.Adapter
にページングを簡単に追加できます。Leanback ページング ライブラリでは、通常、公開されるアダプターは ObjectAdapter
であるため、ライブラリは ObjectAdapter
にページングのサポートを追加します。
アプリにページング アダプターを追加するには、まずプロジェクトにライブラリの依存関係を追加します。
implementation "androidx.leanback:leanback-paging:$version"
次に、androidx.paging.PagingDataAdapter
ではなく androidx.leanback.paging.PagingDataAdapter
を使用して、Paging 3 のドキュメントに沿って実装します。唯一の違いは、Presenter
または PresenterSelector
を渡せるようになったことです。これは、ListRow
など、通常 ObjectAdapter
を使用する場所で使用できます。
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 UI ツールキットのテンプレートでは、ブラウズ画面にサイド ナビゲーションが用意されています。アプリの上部にタブの行を水平に追加するには、代わりに Leanback タブを使用します。
プロジェクトにライブラリ依存関係を追加します。
implementation "androidx.leanback:leanback-tab:$version"
次に、既存の ViewPager ガイドに沿って LeanbackTabLayout
と LeanbackViewPager
を使用してタブを実装します。LeanbackViewPager
は ViewPager2
ではなく ViewPager
に基づいています。
次に例を示します。
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 ツールキットにブリッジ テーマを使用することもできます。
タブから上部へのフォーカスの移動
レイアウトの高さが画面の高さよりも大きいときに、十字キーの上ボタンを押すと、コントロールはフラグメント内に留まって上のアイテムに移動するのではなく、タブに戻ります(図 1 を参照)。この問題に対処するには、フラグメント内のコンテンツでフォーカス検索をオーバーライドする必要があります。たとえば、RowsSupportFragment
を使用します。BrowseSupportFragment
は、タブ内で使用できません。フォーカス検索メソッドがオーバーライドされているため、フォーカスをタブに戻すことができないからです。