Librerie di toolkit dell'interfaccia utente Leanback

Crea app migliori con Compose
Crea UI accattivanti con codice minimo utilizzando Jetpack Compose per Android TV OS.

Il toolkit UI Leanback ritirato fornisce alcune librerie specifiche per la TV esclusive per le 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.
  • Libreria delle preferenze Leanback: fornisce schermate di preferenze e impostazioni coerenti con la piattaforma, ma può essere personalizzata con temi in modo che corrisponda alla tua app.
  • Libreria Leanback Paging: supporta il modello di paginazione AndroidX per ObjectAdapters, che vengono comunemente utilizzati con i modelli Leanback.
  • Libreria Leanback Tabs: supporta la navigazione a schede su Android TV.

Libreria di paginazione Leanback

La paginazione all'interno del toolkit UI Leanback funziona come la libreria AndroidX Paging 3, che semplifica l'aggiunta della paginazione a un RecyclerView.Adapter. Con la libreria Leanback Paging, l'adattatore esposto è in genere un ObjectAdapter e non un, quindi la libreria aggiunge il supporto della paginazione a ObjectAdapter.

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

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

Poi segui la documentazione di Paging 3 utilizzando androidx.leanback.paging.PagingDataAdapter anziché androidx.paging.PagingDataAdapter. L'unica differenza è che ora puoi inserire un Presenter o un PresenterSelector. Funziona ovunque utilizzeresti normalmente un ObjectAdapter, ad esempio in un 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);

Libreria Leanback Tabs

I modelli del toolkit UI Leanback forniscono la navigazione laterale nella schermata di navigazione. Per aggiungere una riga di schede orizzontalmente nella parte superiore dell'app, puoi utilizzare invece le schede Leanback.

Aggiungi la dipendenza della libreria al tuo progetto:

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

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

Di seguito è riportato 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 nei temi supportati e nella gestione dello spostamento del focus.

Temi supportati

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

Spostamento dello stato attivo dalle schede alla parte superiore

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

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