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.