Il toolkit Leanback UI fornisce alcune librerie specifiche per la TV esclusive per app sviluppate per il sistema operativo Android TV. Queste librerie includono:
- Libreria Leanback: offre modelli UI che semplificare la creazione di app per Android TV.
- Preferenze di Leanback libreria: fornisce schermate di preferenze e impostazioni coerenti con alla piattaforma, ma possono essere tematici in base alla tua app.
- La libreria Leanback Paging supporta
Modello di paging AndroidX per
ObjectAdapters
, di uso comune con Modelli Leanback. - Libreria Leanback Tabs: supporta i formati a schede su Android TV.
Libreria di paging Leanback
Il paging all'interno del toolkit dell'interfaccia utente Leanback funziona come in AndroidX
Paging 3, che
semplifica l'aggiunta di pagine
RecyclerView.Adapter
Con la libreria Leanback Paging, 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"
Poi segui le
Documentazione di Paging 3 utilizzando
androidx.leanback.paging.PagingDataAdapter
invece di
androidx.paging.PagingDataAdapter
. L'unica differenza è che ora sei in grado
per passare in un Presenter
o
PresenterSelector
.
Funziona ovunque tu voglia normalmente usare un ObjectAdapter
, ad esempio in una
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 di toolkit dell'interfaccia utente Leanback offrono una navigazione laterale schermata di navigazione. Per aggiungere una riga di schede orizzontalmente 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 il modello
Guida di ViewPager. 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 relative ai temi supportati e al modo in cui il movimento viene gestito.
Temi supportati
Sono supportati solo i temi derivati da Theme.AppCompat
. TabLayout
contiene un vincolo di applicazione del tema, che impedisce qualsiasi tema non discendente
di Theme.AppCompat
. Puoi anche utilizzare il tema del ponte per
Toolkit UI Leanback.
Imposta lo stato attivo sul movimento dalle schede all'alto
Quando l'altezza del layout è superiore a quella dello schermo e premi il D-pad
il pulsante su, il controllo torna alla scheda anziché rimanere all'interno del frammento
e passando a un elemento al di sopra (vedi figura 1). Per gestire il problema, i contenuti
all'interno del frammento deve 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 allo stato attivo di tornare alla scheda.