Leanback UI ツールキット ライブラリ

Compose でビルドを改善する
Android TV OS 用の Jetpack Compose を使用して、最小限のコードで美しい UI を作成します。
<ph type="x-smartling-placeholder"></ph> テレビ向け Compose →

Leanback UI ツールキットには、テレビ専用ライブラリがいくつか用意されています。 Android TV OS 用に開発されたアプリです。これらのライブラリには次のものが含まれます。

  • Leanback ライブラリ: 次の UI テンプレートを提供します。 Android TV アプリを簡単に作成できます。
  • Leanback の設定 ライブラリ: 環境と整合性の取れた設定画面を提供します。 アプリに合わせてテーマを設定できます。
  • Leanback Paging ライブラリ: ObjectAdapters の AndroidX ページング モデル。 Leanback テンプレート
  • Leanback Tabs ライブラリ: タブ形式をサポート ナビゲーションを使えます。

Leanback ページング ライブラリ

Leanback UI ツールキット内のページングは AndroidX と同じように機能する Paging 3 ライブラリがあり、 ページングの追加を RecyclerView.Adapter。 Leanback ページング ライブラリで公開されるアダプターは通常、 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 UI ツールキットのテンプレートでは、 ブラウズ画面です。タブを横方向に 1 行追加するには: 代わりに Leanback タブを使用できます。

プロジェクトにライブラリ依存関係を追加します。

implementation "androidx.leanback:leanback-tab:$version"

次に、LeanbackTabLayoutLeanbackViewPager を使用してタブを実装します。 既存の ViewPager ガイドをご覧ください。注: LeanbackViewPagerViewPager2 ではなく 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 ツールキット。

タブから上部へのフォーカス移動

レイアウトの高さが画面の高さより大きくて D-pad が押された場合 上ボタン、コントロールがフラグメント内にとどまらずタブに戻る その上のアイテムに移動できます(図 1 を参照)。この問題に対処するため、 フォーカス検索をオーバーライドする必要があります。たとえば、 RowsSupportFragmentBrowseSupportFragment オーバーライドされたフォーカス検索メソッドがあるため、タブ内では使用できません。 フォーカスがタブに戻れないようにします。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">をご覧ください。 <ph type="x-smartling-placeholder">
</ph> 図 1.D-pad の上ボタンを押すと、前の項目ではなくタブにフォーカスが移動します。