Librerie di toolkit dell'interfaccia utente Leanback

Migliora la creazione con Compose
Crea splendide UI con un minimo codice utilizzando Jetpack Compose per il sistema operativo Android TV.

Il toolkit per la UI di Leanback fornisce alcune librerie specifiche per la TV esclusive per le app sviluppate per il sistema operativo Android TV. Queste librerie includono:

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

Libreria di paging Leanback

La 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 Leanback Paging, l'adattatore esposto è in genere un ObjectAdapter, pertanto 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"

Poi segui la documentazione di Paging 3 utilizzando androidx.leanback.paging.PagingDataAdapter anziché androidx.paging.PagingDataAdapter. L'unica differenza è che ora puoi passare in un elemento Presenter o PresenterSelector. Funziona ovunque tu voglia normalmente usare 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 dell'interfaccia utente di Leanback offrono una barra di navigazione laterale nella schermata di navigazione. Per aggiungere una riga di schede in orizzontale nella parte superiore dell'app, puoi usare 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 per i temi che supporta e per la gestione dello spostamento di messa a fuoco.

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 anche usare il tema ponte per il toolkit Leanback UI.

Imposta lo stato attivo sul movimento dalle schede all'alto

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

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