Leanback-UI-Toolkit-Bibliotheken

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

  • Leanback-Bibliothek: stellt UI-Vorlagen bereit, die die Erstellung von Android TV-Apps vereinfachen.
  • Leanback-Bibliothek: stellt Bildschirme mit Einstellungen und Einstellungen bereit, die der Plattform entsprechen, aber auch an Ihre App angepasst werden können.
  • Bibliothek Leanback Paging: Unterstützt das AndroidX-Seitenmodell für ObjectAdapters, das häufig mit den Leanback-Vorlagen verwendet wird.
  • Leanback-Tabs-Bibliothek: unterstützt die Navigation über Tabs auf Android TV.

Leanback-Paging-Bibliothek

Das Paging innerhalb des Leanback-UI-Toolkits funktioniert wie die AndroidX-Bibliothek Paging 3, mit der das Hinzufügen von Paging zu einem RecyclerView.Adapter vereinfacht wird. Bei der Leanback-Paging-Bibliothek ist der bereitgestellte Adapter normalerweise ein ObjectAdapter, sodass die Bibliothek Seitenunterstützung für ObjectAdapter bietet.

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

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

Folgen Sie dann der Paging 3-Dokumentation mit androidx.leanback.paging.PagingDataAdapter anstelle von androidx.paging.PagingDataAdapter. Der einzige Unterschied besteht darin, dass Sie jetzt ein Presenter- oder PresenterSelector-Element übergeben können. Das funktioniert überall, wo Sie normalerweise ein 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-Tab-Bibliothek

Die Vorlagen für das Leanback-UI-Toolkit bieten eine seitliche Navigation im Browserbildschirm. Um oben in der App eine Reihe von Tabs horizontal hinzuzufügen, können stattdessen Leanback-Tabs verwendet werden.

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. Beachten Sie, dass LeanbackViewPager auf ViewPager basiert, 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);

Einschränkungen

Die Leanback-Tabs-Bibliothek weist Einschränkungen in Bezug auf die unterstützten Themen und die Handhabung von Fokusbewegungen auf.

Unterstützte Designs

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

Bewegung von Tabs nach oben fokussieren

Ist die Layouthöhe größer als die Bildschirmhöhe und drücken Sie das Steuerkreuz nach oben, wird die Steuerung zurück zum Tab verschoben, anstatt im Fragment zu bleiben und zu einem Element darüber zu navigieren (siehe Abbildung 1). Um dieses Problem zu beheben, müssen Inhalte im Fragment die Fokussuche überschreiben. Verwenden Sie beispielsweise RowsSupportFragment. BrowseSupportFragment kann nicht innerhalb eines Tabs verwendet werden, da dort eine überschriebene Fokussuchmethode verwendet wird, die verhindert, dass der Fokus zurück auf den Tab verschoben wird.

Abbildung 1. Mit dem Steuerkreuz oben kannst du den Fokus auf den Tab statt auf das vorherige Element verschieben.