Biblioteki narzędzi interfejsu TalkBack

Twórz lepsze aplikacje dzięki Compose
Twórz piękne interfejsy użytkownika przy użyciu minimalnej ilości kodu dzięki Jetpack Compose dla Androida TV.

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

  • Biblioteka Leanback: udostępnia szablony interfejsu użytkownika, które upraszczają tworzenie aplikacji na Androida TV.
  • Biblioteka Leanback Preferences: udostępnia ekrany preferencji i ustawień, które są zgodne z platformą, ale można je dostosować do 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ę za pomocą kart na Androidzie TV.

Biblioteka Leanback Paging

Stronicowanie w zestawie narzędzi Leanback UI 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 ObjectAdapter , więc biblioteka dodaje obsługę stronicowania do ObjectAdapter.

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

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

Następnie postępuj zgodnie z dokumentacją Paging 3 używając androidx.leanback.paging.PagingDataAdapter zamiast androidx.paging.PagingDataAdapter. Jedyna różnica polega na tym, że możesz teraz przekazać Presenter lub PresenterSelector. Działa to wszędzie tam, gdzie zwykle używasz 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 Leanback Tabs

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

Dodaj zależność biblioteki 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 LeanbackViewPager jest oparty na ViewPager, a nie na 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 motywu niepochodzącego z Theme.AppCompat. Możesz też użyć motywu pomostowego dla zestawu narzędzi Leanback UI.

Przenoszenie fokusu z kart na górę

Gdy wysokość układu jest większa niż wysokość ekranu i naciśniesz przycisk w górę na padzie kierunkowym, sterowanie 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ąpić 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 fokusu, która uniemożliwia powrót fokusu do karty.

Rysunek 1. Przycisk w górę na padzie kierunkowym przenosi fokus na kartę zamiast na poprzedni element.