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.