Leanback-UI-Toolkit-Bibliotheken

Bessere Apps mit Compose entwickeln
Mit Jetpack Compose für Android TV OS lassen sich ansprechende Benutzeroberflächen mit minimalem Code erstellen.

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

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

Leanback Paging-Bibliothek

Das Paging im Leanback UI-Toolkit funktioniert genauso wie in der AndroidX Paging 3-Bibliothek, die das Hinzufügen von Paging zu einem RecyclerView.Adapter vereinfacht. Bei der Leanback Paging-Bibliothek ist der bereitgestellte Adapter in der Regel ein ObjectAdapter . Die Bibliothek fügt also ObjectAdapter Paging-Unterstützung 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 in der Lage sind, einen Presenteroder PresenterSelectorzu übergeben. Dies funktioniert überall dort, wo Sie normalerweise einen ObjectAdapter verwenden, 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 seitliche Navigation auf dem Bildschirm „Durchsuchen“. Wenn Sie stattdessen eine horizontale Reihe von Tabs oben in der App hinzufügen möchten, können Sie Leanback Tabs verwenden.

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

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

Implementieren Sie dann Tabs mit LeanbackTabLayout und LeanbackViewPager gemäß der vorhandenen ViewPager-Anleitung. Beachten Sie, dass LeanbackViewPager auf ViewPager und nicht auf ViewPager2 basiert.

Hier ist 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 Beschränkungen hinsichtlich der unterstützten Designs und der Art und Weise, wie die Fokusbewegung gehandhabt wird.

Unterstützte Designs

Es werden nur Designs unterstützt, die von Theme.AppCompat abgeleitet sind. TabLayout enthält eine Einschränkung zur Designerzwingung, die verhindert, dass ein anderes Design als ein Nachfolger von Theme.AppCompat verwendet wird. Sie können auch das Bridge-Design 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 Auf-Taste auf dem Steuerkreuz drücken, wird der Fokus 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 der Inhalt im Fragment die Fokussuche überschreiben. Verwenden Sie beispielsweise RowsSupportFragment. BrowseSupportFragment kann nicht in einem Tab verwendet werden, da es eine überschriebene Fokussuchmethode hat, die verhindert, dass der Fokus wieder auf den Tab verschoben wird.

Abbildung 1 Die Auf-Taste auf dem Steuerkreuz verschiebt den Fokus auf den Tab anstelle auf das vorherige Element.