Biblioteki narzędzi interfejsu TalkBack

Tworzenie lepszych aplikacji za pomocą Compose
Twórz piękne interfejsy z minimalną ilością kodu za pomocą Jetpack Compose na Androida TV OS.

Wycofany zestaw narzędzi Leanback UI zawiera biblioteki przeznaczone specjalnie na telewizory, które są dostępne tylko w aplikacjach opracowanych na Androida TV. Te biblioteki obejmują:

  • Biblioteka Leanback: udostępnia szablony interfejsu, które upraszczają tworzenie aplikacji na Androida TV.
  • Leanback Preferences library: udostępnia ekrany ustawień i preferencji, które są zgodne z platformą, ale można je dostosować do motywu aplikacji.
  • Biblioteka Leanback Paging: obsługuje model stronicowania AndroidX w przypadku ObjectAdapters, które są często używane z szablonami Leanback.
  • Biblioteka Leanback Tabs: obsługuje nawigację na kartach na Androidzie TV.

Biblioteka stronicowania Leanback

Stronicowanie w zestawie narzędzi interfejsu Leanback działa tak samo jak w bibliotece AndroidX Paging 3, która upraszcza dodawanie stronicowania do RecyclerView.Adapter. W przypadku biblioteki Leanback Paging udostępniany adapter jest zwykle typu ObjectAdapter, więc biblioteka dodaje obsługę stronicowania do ObjectAdapter.

Aby dodać do aplikacji adapter stronicowania, najpierw dodaj zależność biblioteki do projektu:

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

Następnie postępuj zgodnie z dokumentacją dotyczącą stronicowania 3, używając znaku androidx.leanback.paging.PagingDataAdapter zamiast znaku androidx.paging.PagingDataAdapter. Jedyna różnica polega na tym, że możesz teraz przekazywać wartość Presenter lub PresenterSelector. Ten skrót działa wszędzie tam, gdzie zwykle używasz znaku ObjectAdapter, np. 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 Leanback

Szablony pakietu narzędzi Leanback UI zapewniają nawigację boczną na ekranie przeglądania. Aby dodać wiersz kart w poziomie u góry aplikacji, możesz zamiast tego użyć kart Leanback.

Dodaj do projektu zależność biblioteki:

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

Następnie zaimplementuj karty za pomocą elementów LeanbackTabLayoutLeanbackViewPager, postępując zgodnie z przewodnikiem po ViewPager. Pamiętaj, że LeanbackViewPager zależy od ViewPager, a nie od 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 ma ograniczenia dotyczące obsługiwanych motywów i sposobu obsługi przenoszenia fokusu.

Obsługiwane motywy

Obsługiwane są tylko motywy pochodzące z Theme.AppCompat. TabLayout zawiera ograniczenie dotyczące wymuszania motywu, które uniemożliwia używanie dowolnego motywu niebędącego elementem podrzędnym motywu Theme.AppCompat. Możesz też użyć motywu bridge w zestawie narzędzi Leanback UI.

Przenoszenie zaznaczenia z kart na górę

Gdy wysokość układu jest większa niż wysokość ekranu i naciśniesz przycisk D-pada w górę, fokus wróci do karty zamiast pozostać w fragmencie i przejść do elementu powyżej (patrz rysunek 1). Aby rozwiązać ten problem, treści w fragmencie muszą zastępować wyszukiwanie fokusu. Możesz na przykład użyć RowsSupportFragment. BrowseSupportFragment nie można używać w karcie, ponieważ ma on zastąpioną metodę wyszukiwania zaznaczenia, która uniemożliwia powrót zaznaczenia do karty.

Rysunek 1. Naciśnięcie przycisku w górę na padzie kierunkowym powoduje przeniesienie zaznaczenia na kartę zamiast na poprzedni element.