Das Leanback-UI-Toolkit bietet einige TV-spezifische Bibliotheken, die exklusiv für Apps, die für Android TV OS entwickelt wurden Zu diesen Bibliotheken gehören:
- Leanback-Bibliothek: stellt UI-Vorlagen bereit, die das Erstellen von Android TV-Apps zu vereinfachen.
- Leanback-Einstellungen Bibliothek: Hier finden Sie Einstellungen, die den Bildschirmen aber auch thematisch passend zu Ihrer App gestalten.
- Leanback-Seitenging-Bibliothek: unterstützt die
Das AndroidX-Auslagerungsmodell für
ObjectAdapters
, das häufig mit dem Leanback-Vorlagen. - Leanback Tabs-Bibliothek: unterstützt Tabs Navigation auf Android TV.
Leanback-Paging-Bibliothek
Das Paging im Leanback-UI-Toolkit funktioniert genauso wie im AndroidX-Toolkit.
Page 3-Bibliothek, die
vereinfacht das Hinzufügen von Paging zu einem
RecyclerView.Adapter
Bei der Leanback-Seitenbibliothek ist der dargestellte Adapter in der Regel ein
ObjectAdapter
sodass die Bibliothek die Paging-Unterstützung für ObjectAdapter
hinzufügt.
Um Ihrer App einen Paging-Adapter hinzuzufügen, fügen Sie zuerst die Bibliotheksabhängigkeit zu Ihrem Projekt hinzu:
implementation "androidx.leanback:leanback-paging:$version"
Folgen Sie dann den
Dokumentation für Seite 3 mit
androidx.leanback.paging.PagingDataAdapter
statt
androidx.paging.PagingDataAdapter
. Der einzige Unterschied ist, dass Sie jetzt
um eine Presenter
zu übergeben.
oder
PresenterSelector
Das funktioniert überall dort, wo Sie normalerweise ObjectAdapter
verwenden, z. B. in einer
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 Toolkit-Vorlagen für die Leanback-Benutzeroberfläche ermöglichen eine seitliche Navigation im Bildschirm ansehen. So fügen Sie eine Reihe von Tabs horizontal hinzu: im oberen Bereich der App kannst du stattdessen Leanback-Tabs verwenden.
Fügen Sie Ihrem Projekt die Bibliotheksabhängigkeit hinzu:
implementation "androidx.leanback:leanback-tab:$version"
Implementieren Sie dann Tabs mithilfe von LeanbackTabLayout
und LeanbackViewPager
,
indem Sie den vorhandenen
ViewPager-Anleitung Beachten Sie, dass
LeanbackViewPager
basiert auf ViewPager
, 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 weist Einschränkungen hinsichtlich der unterstützten Designs und der Fokussierung auf. gehandhabt wird.
Unterstützte Designs
Es werden nur aus Theme.AppCompat
abgeleitete Themen unterstützt. TabLayout
enthält eine Erzwingungseinschränkung für das Design, die verhindert, dass nicht untergeordnete Designs
von Theme.AppCompat
nicht verwendet werden. Sie können das Brückendesign auch für die
Leanback-UI-Toolkit
Bewegung von Tabs nach oben fokussieren
Wenn die Layouthöhe größer als die Bildschirmhöhe ist und Sie das Steuerkreuz drücken
wird das Steuerelement zurück zum Tab verschoben, anstatt innerhalb des Fragments zu bleiben.
und zu einem darüber liegenden Element navigieren (siehe Abbildung 1). Um dieses Problem zu beheben,
innerhalb des Fragments die Fokussuche überschreiben; Verwenden Sie zum Beispiel
RowsSupportFragment
BrowseSupportFragment
kann nicht innerhalb eines Tabs verwendet werden, da dieser eine überschriebene Fokussuchmethode hat,
verhindert, dass der Fokus wieder auf den Tab verschoben wird.