Zestaw narzędzi interfejsu Leanback zawiera niektóre biblioteki typowe dla telewizji, dostępne wyłącznie na system operacyjny Android TV. Do tych bibliotek należą:
- Biblioteka Leanback: udostępnia szablony interfejsu, które ułatwiają tworzenie aplikacji na Androida TV.
- Ustawienia Leanback Library: udostępnia ekrany preferencji i ustawień zgodne z z platformy, ale też dobrać tematykę pasującą do Twojej aplikacji.
- Biblioteka Leanback Paging: obsługuje
Model stronicowania AndroidX dla
ObjectAdapters
, który jest powszechnie używany z Szablony Leanback. - Biblioteka Leanback Tabs: obsługuje karty nawigacji na Androidzie TV.
Biblioteka stronicowania Leanback
Tworzenie stron w zestawie narzędzi interfejsu Leanback działa tak samo jak w AndroidzieX.
biblioteki Paging 3, która
upraszcza dodawanie stronicowania do
RecyclerView.Adapter
.
W przypadku biblioteki stronicowania Leanback widoczny adapter jest zwykle
ObjectAdapter
więc biblioteka dodaje obsługę stronicowania do ObjectAdapter
.
Aby dodać do aplikacji adapter stronicowania, najpierw dodaj do projektu zależność biblioteki:
implementation "androidx.leanback:leanback-paging:$version"
Następnie postępuj zgodnie z
Dokumentacja znaczników „Paging 3” w języku angielskim:
androidx.leanback.paging.PagingDataAdapter
zamiast
androidx.paging.PagingDataAdapter
Jedyna różnica polega na tym, że teraz można
do zaliczenia Presenter
lub
PresenterSelector
Działa on wszędzie tam, gdzie zwykle używa się identyfikatora ObjectAdapter
, np.
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);
Biblioteka kart Leanback
Szablony zestawu narzędzi interfejsu Leanback zapewniają boczną nawigację w ekranu przeglądania. Dodawanie wiersza kart w poziomie u góry aplikacji, możesz zamiast tego używać kart Leanback.
Dodaj do projektu zależność biblioteki:
implementation "androidx.leanback:leanback-tab:$version"
Następnie zaimplementuj karty za pomocą funkcji LeanbackTabLayout
i LeanbackViewPager
przez
zgodnie z istniejącym
Przewodnik po wyświetleniu strony ViewPager. Pamiętaj, że
Wartość LeanbackViewPager
jest oparta na kolumnie ViewPager
, a nie na podstawie ViewPager2
.
Oto przykład:
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);
Ograniczenia
Biblioteka Leanback Tabs podlega ograniczeniom dotyczącym motywów, które obsługuje, oraz sposobu skupienia ruch jest obsługiwany.
Obsługiwane motywy
Obsługiwane są tylko motywy, które pochodzą z elementu Theme.AppCompat
. TabLayout
zawiera ograniczenie egzekwowania motywu, które zapobiega występowaniu motywu niepodrzędnego
z Theme.AppCompat
. Możesz również użyć motywu mostu dla:
Zestaw narzędzi interfejsu Leanback.
Przenieś zaznaczenie z kart do góry
Gdy wysokość układu jest większa niż wysokość ekranu i naciśniesz pad kierunkowy
przycisk w górę, element sterujący wróci do karty zamiast pozostawać we fragmencie
i przejście do elementu znajdującego się nad nim (patrz ilustracja 1). Aby rozwiązać ten problem,
wewnątrz fragmentu musi zastąpić wyszukiwanie zaznaczenia; na przykład użyj
RowsSupportFragment
BrowseSupportFragment
nie można jej używać na karcie, ponieważ ma ona zastąpione metodę wyszukiwania
zapobiega przeniesieniu zaznaczenia z powrotem na kartę.