Leanback-UI-Toolkit-Bibliotheken

Bessere Apps mit Compose entwickeln
Mit Jetpack Compose für Android TV OS können Sie mit minimalem Code schöne Benutzeroberflächen erstellen.

Das eingestellte Leanback UI-Toolkit bietet einige TV-spezifische Bibliotheken, die ausschließlich für Apps verfügbar sind, die für Android TV OS entwickelt wurden. Dazu gehören:

  • Leanback-Bibliothek: Bietet UI-Vorlagen, die das Erstellen von Android TV-Apps vereinfachen.
  • Leanback-Einstellungen: Diese Bibliothek bietet Einstellungsbildschirme, die mit der Plattform konsistent sind, aber an Ihre App angepasst werden können.
  • Leanback Paging-Bibliothek: Unterstützt das AndroidX-Pagingmodell für ObjectAdapters, die häufig mit den Leanback-Vorlagen verwendet werden.
  • Leanback Tabs-Bibliothek: Unterstützt die Tab-Navigation auf Android TV.

Leanback-Paging-Bibliothek

Die Paginierung im Leanback-UI-Toolkit funktioniert genauso wie in der AndroidX-Bibliothek Paging 3, mit der sich die Paginierung in eine RecyclerView.Adapter einfügen lässt. Mit der Leanback Paging-Bibliothek ist der bereitgestellte Adapter in der Regel ein ObjectAdapter. Die Bibliothek fügt ObjectAdapter also die Unterstützung für das Paging hinzu.

Wenn Sie Ihrer App einen Paging-Adapter hinzufügen möchten, fügen Sie zuerst die Bibliotheksabhängigkeit zu Ihrem Projekt hinzu:

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

Folgen Sie dann der Paging 3-Dokumentation und verwenden Sie androidx.leanback.paging.PagingDataAdapter anstelle von androidx.paging.PagingDataAdapter. Der einzige Unterschied besteht darin, dass Sie jetzt Presenter oder PresenterSelector übergeben können. Das funktioniert überall dort, wo Sie normalerweise ein ObjectAdapter verwenden würden, z. B. in einem 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);

Leanback-Tabs-Bibliothek

Die Vorlagen des Leanback UI-Toolkits bieten eine Seitennavigation auf dem Browsing-Bildschirm. Wenn Sie stattdessen eine horizontale Zeile mit Tabs oben in der App hinzufügen möchten, können Sie Leanback-Tabs verwenden.

Fügen Sie Ihrem Projekt die Bibliotheksabhängigkeit hinzu:

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

Implementieren Sie dann Tabs mit LeanbackTabLayout und LeanbackViewPager. Folgen Sie dazu der vorhandenen ViewPager-Anleitung. LeanbackViewPager basiert auf ViewPager und nicht auf ViewPager2.

Hier ein Beispiel:

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);

Beschränkungen

Die Leanback Tabs-Bibliothek hat Einschränkungen hinsichtlich der unterstützten Designs und der Art und Weise, wie die Fokusbewegung gehandhabt wird.

Unterstützte Themen

Es werden nur Designs unterstützt, die von Theme.AppCompat abgeleitet sind. TabLayout enthält eine Einschränkung für die Erzwingung von Designs, die verhindert, dass ein anderes Design als ein untergeordnetes Design von Theme.AppCompat verwendet wird. Sie können das Bridge-Design auch für das Leanback UI-Toolkit verwenden.

Fokusbewegung von Tabs nach oben

Wenn die Layout-Höhe größer als die Bildschirmhöhe ist und Sie die Aufwärtstaste des Steuerkreuzes drücken, wird die Steuerung wieder auf den Tab verschoben, anstatt im Fragment zu bleiben und zu einem Element darüber zu wechseln (siehe Abbildung 1). Um dieses Problem zu beheben, muss die Fokus-Suche durch Inhalte im Fragment überschrieben werden. Verwenden Sie dazu beispielsweise RowsSupportFragment. BrowseSupportFragment kann nicht in einem Tab verwendet werden, da die Fokus-Suchmethode überschrieben wurde und der Fokus nicht zum Tab zurückkehren kann.

Abbildung 1. Mit der Aufwärtstaste des Steuerkreuzes wird der Fokus auf den Tab anstatt auf das vorherige Element verschoben.