Bibliotecas de ferramentas de interface do Leanback

Criar da melhor forma com o Compose
Crie interfaces incríveis com o mínimo de código usando o Jetpack Compose para o SO do Android TV.

O kit de ferramentas de interface do Leanback oferece algumas bibliotecas específicas de TV exclusivas para apps desenvolvidos para o SO Android TV. Essas bibliotecas incluem o seguinte:

  • Biblioteca Leanback: oferece modelos de interface que simplificar a criação de apps para Android TV.
  • Preferências de Leanback biblioteca: fornece telas de preferências e configurações consistentes com da plataforma, mas pode ter um tema para combinar com seu app.
  • Biblioteca Leanback Paging: compatível com a Modelo de paginação do AndroidX para ObjectAdapters, que é comumente usado com a Modelos do Leanback.
  • Biblioteca Leanback Tabs: compatível com guias navegação no Android TV.

Biblioteca Paging do Leanback

A paginação dentro do kit de ferramentas de interface do Leanback funciona da mesma forma que a biblioteca AndroidX Paging 3, que simplifica a adição de paginação a uma RecyclerView.Adapter. Com a biblioteca Leanback Paging, o adaptador exposto normalmente é um ObjectAdapter Em vez disso, a biblioteca vai adicionar suporte à paginação para ObjectAdapter.

Para adicionar um adaptador de paginação ao app, primeiro adicione a dependência da biblioteca ao projeto:

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

Em seguida, siga as Documentação da Paging 3 usando androidx.leanback.paging.PagingDataAdapter em vez de androidx.paging.PagingDataAdapter. A única diferença é que agora você pode para transmitir um Presenter ou PresenterSelector Isso funciona em qualquer lugar em que você normalmente usaria um ObjectAdapter, como em uma 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);

Biblioteca de guias do YouTube TV

Os modelos do kit de ferramentas de interface do Leanback oferecem navegação lateral na tela de navegação. Para adicionar uma linha de guias horizontalmente na parte de cima do app, você pode usar as guias do Leanback.

Adicione a dependência da biblioteca ao seu projeto:

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

Em seguida, implemente as guias usando LeanbackTabLayout e LeanbackViewPager ao seguindo o modelo Guia do ViewPager. Observe que LeanbackViewPager é baseado em ViewPager, não em ViewPager2.

Confira um exemplo:

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);

Limitações

A biblioteca Leanback Tabs tem limitações nos temas compatíveis e na forma como o foco o movimento é tratado.

Temas compatíveis

Somente temas derivados de Theme.AppCompat são compatíveis. TabLayout contém uma restrição de aplicação de tema, que impede qualquer tema não descendente de Theme.AppCompat sejam usados. Você também pode usar o tema de ponte para o Kit de ferramentas de interface do Leanback.

Focar o movimento das guias para o topo

Quando a altura do layout é maior que a da tela e você pressiona o botão direcional botão para cima, o controle volta para a guia em vez de permanecer dentro do fragmento e navegar até um item acima dele (veja a figura 1). Para resolver esse problema, o conteúdo dentro do fragmento precisam substituir a pesquisa de foco. por exemplo, use RowsSupportFragment BrowseSupportFragment não pode ser usado dentro de uma guia, pois tem um método de pesquisa de foco substituído que impede que o foco volte para a guia.

Figura 1. O botão direcional para cima move o foco para a guia em vez do item anterior.