Zestaw narzędzi interfejsu Suica zawiera kilka bibliotek przeznaczonych specjalnie dla telewizji. Są one dostępne tylko w aplikacjach utworzonych na potrzeby systemu operacyjnego Android TV. Do tych bibliotek należą:
- Biblioteka leanback: zawiera szablony interfejsu, które upraszczają tworzenie aplikacji na Androida TV.
- Biblioteka ustawień TalkBack: zawiera ekrany z ustawieniami i ustawieniami, które są spójne z platformą, ale mogą pasować do Twojej aplikacji.
- Biblioteka leanback stronicowania: obsługuje model stronicowania AndroidX dla
ObjectAdapters
, który jest powszechnie używany z szablonami Leanback. - Biblioteka kart Leanback: obsługuje nawigację po kartach na Androidzie TV.
Biblioteka stronicowania w funkcji Classroom
Uruchamianie w zestawie stronicowania w zestawie narzędzi interfejsu TalkBack działa tak samo jak w bibliotece Paging 3 w AndroidzieX, co upraszcza dodawanie stronicowania do RecyclerView.Adapter
.
W przypadku biblioteki stronicowania SKAdNetwork ujawniony adapter to zwykle ObjectAdapter
, dlatego biblioteka dodaje obsługę stronicowania do ObjectAdapter
.
Aby dodać adapter stronicowania do aplikacji, najpierw dodaj do projektu zależność biblioteki:
implementation "androidx.leanback:leanback-paging:$version"
Następnie postępuj zgodnie z dokumentacją etapu 3, używając parametru androidx.leanback.paging.PagingDataAdapter
zamiast androidx.paging.PagingDataAdapter
. Jedyna różnica polega na tym, że teraz możesz przekazywać Presenter
lub PresenterSelector
.
Działa to wszędzie tam, gdzie normalnie jest używany ObjectAdapter
, na przykład w 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 funkcji BeyondCorp
Szablony zestawu narzędzi interfejsu TalkBack zapewniają boczną nawigację na ekranie przeglądania. Aby dodać wiersz kart w poziomie u góry aplikacji, użyj zamiast tego kart funkcji TalkBack.
Dodaj zależność z biblioteką do projektu:
implementation "androidx.leanback:leanback-tab:$version"
Następnie zaimplementuj karty za pomocą LeanbackTabLayout
i LeanbackViewPager
, postępując zgodnie z dotychczasowym przewodnikiem po ViewPager. Pamiętaj, że pole LeanbackViewPager
jest oparte na wartości ViewPager
, a nie 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 kart funkcji BeyondCorp ma ograniczenia w zakresie obsługiwanych motywów i sposobu obsługi ruchu fokusu.
Obsługiwane motywy
Obsługiwane są tylko motywy pochodzące z szablonu Theme.AppCompat
. TabLayout
zawiera ograniczenie wymuszania motywu, które uniemożliwia użycie motywu niepodrzędnego elementu Theme.AppCompat
. Możesz też użyć motywu mostka w narzędziach Leanback UI.
Przenieś zaznaczenie kart na górę
Jeśli wysokość układu jest większa niż wysokość ekranu i naciśniesz przycisk w górę na padzie kierunkowym, element sterujący wróci do karty, zamiast pozostawać we fragmencie i przejść do elementu nad nim (zobacz ilustrację 1). Aby rozwiązać ten problem, treści wewnątrz fragmentu muszą zastąpić aktywne wyszukiwanie, na przykład użycie RowsSupportFragment
.
Nie można użyć funkcji BrowseSupportFragment
w karcie, ponieważ ma ona zastąpioną metodę wyszukiwania zaznaczenia, która uniemożliwia przeniesienie zaznaczenia na kartę.