Librerie di toolkit dell'interfaccia utente Leanback

Il toolkit dell'interfaccia utente di Leanback fornisce alcune librerie specifiche per TV esclusive delle app sviluppate per il sistema operativo Android TV. Queste librerie includono:

  • Libreria Leanback: fornisce modelli di UI che semplificano la creazione di app per Android TV.
  • Raccolta delle preferenze di Leanback: fornisce schermate di preferenze e impostazioni coerenti con la piattaforma, ma che possono essere personalizzate in base a un tema corrispondente alla tua app.
  • Libreria Leanback Paging: supporta il modello di paging AndroidX per ObjectAdapters, comunemente utilizzato con i modelli di Leanback.
  • Raccolta di schede Leanback: supporta la navigazione a schede su Android TV.

Libreria di paging Leanback

Il paging all'interno del toolkit dell'interfaccia utente di Leanback funziona come la libreria Paging 3 di AndroidX, che semplifica l'aggiunta del paging a una RecyclerView.Adapter. Con la libreria di paging Leanback, l'adattatore esposto è in genere un ObjectAdapter, quindi la libreria aggiunge il supporto del paging a ObjectAdapter.

Per aggiungere un adattatore di paging alla tua app, aggiungi prima la dipendenza della libreria al progetto:

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

A questo punto, segui la documentazione relativa alla pagina 3 utilizzando androidx.leanback.paging.PagingDataAdapter anziché androidx.paging.PagingDataAdapter. L'unica differenza è che ora puoi trasmettere un modulo Presenter o PresenterSelector. Funziona ovunque in cui normalmente useresti un ObjectAdapter, ad esempio in 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);

Raccolta di schede Leanback

I modelli del toolkit dell'interfaccia utente di Leanback offrono la navigazione laterale nella schermata di esplorazione. Per aggiungere una riga di schede orizzontalmente nella parte superiore dell'app, puoi usare le schede Leanback.

Aggiungi la dipendenza dalla libreria al progetto:

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

Quindi implementa le schede utilizzando LeanbackTabLayout e LeanbackViewPager seguendo la guida ViewPager esistente. Tieni presente che LeanbackViewPager si basa su ViewPager, non su ViewPager2.

Ecco un esempio:

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

Limitazioni

La libreria Leanback Tabs presenta limitazioni relative ai temi che supporta e alla modalità di gestione del movimento del focus.

Temi supportati

Sono supportati solo i temi derivati da Theme.AppCompat. TabLayout contiene un vincolo di applicazione forzata del tema, che impedisce l'utilizzo di qualsiasi tema non discendente di Theme.AppCompat. Puoi usare il tema del bridge anche per il toolkit dell'interfaccia utente di Leanback.

Imposta lo stato attivo sul movimento dalle schede all'alto

Quando l'altezza del layout è superiore all'altezza dello schermo e premi il pulsante del D-pad in alto, il controllo torna alla scheda anziché rimanere all'interno del frammento e passare a un elemento al di sopra (vedi la figura 1). Per gestire questo problema, i contenuti all'interno del frammento devono sostituire la ricerca dello stato attivo; ad esempio, utilizza RowsSupportFragment. BrowseSupportFragment non può essere utilizzato all'interno di una scheda in quanto ha un metodo di ricerca dello stato attivo sostituito che impedisce lo stato attivo di tornare alla scheda.

Figura 1. Il pulsante D-pad sposta lo stato attivo sulla scheda anziché sull'elemento precedente.