Bibliothèques de kits d'interface utilisateur Leanback

Créez mieux avec Compose
Créez des interfaces utilisateur attrayantes avec un minimum de code à l'aide de Jetpack Compose pour l'OS Android TV.

Le kit d'UI Leanback fournit des bibliothèques spécifiques aux téléviseurs et exclusives aux applications développées pour l'OS Android TV. Ces bibliothèques incluent les éléments suivants:

  • Bibliothèque Leanback: fournit des modèles d'interface utilisateur qui simplifient la création d'applications Android TV.
  • Bibliothèque Leanback Preferences (Préférences Leanback) : fournit des écrans de préférences et de paramètres cohérents avec la plate-forme, mais qui peuvent être adaptés à votre application.
  • Bibliothèque Leanback Paging: prend en charge le modèle de pagination AndroidX pour ObjectAdapters, qui est couramment utilisé avec les modèles Leanback.
  • Bibliothèque Leanback Tabs: compatible avec la navigation par onglets sur Android TV.

Bibliothèque de pagination Leanback

La pagination dans le kit d'UI Leanback fonctionne de la même manière que la bibliothèque Paging 3 d'AndroidX, ce qui simplifie l'ajout de pagination à un RecyclerView.Adapter. Avec la bibliothèque Leanback Paging, l'adaptateur exposé est généralement un ObjectAdapter. La bibliothèque ajoute donc la prise en charge de la pagination à ObjectAdapter.

Pour ajouter un adaptateur de pagination à votre application, commencez par ajouter la dépendance de la bibliothèque à votre projet:

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

Suivez ensuite la documentation Paging 3 en utilisant androidx.leanback.paging.PagingDataAdapter au lieu de androidx.paging.PagingDataAdapter. La seule différence est que vous pouvez désormais transmettre un élément Presenter ou PresenterSelector. Cela fonctionne partout où vous utilisez normalement un ObjectAdapter, par exemple dans 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);

Bibliothèque Leanback Tabs

Les modèles du kit d'interface utilisateur Leanback fournissent une navigation latérale sur l'écran de navigation. Pour ajouter une ligne d'onglets horizontalement en haut de l'application, vous pouvez utiliser les onglets Leanback à la place.

Ajoutez la dépendance de bibliothèque à votre projet:

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

Implémentez ensuite les onglets à l'aide de LeanbackTabLayout et LeanbackViewPager en suivant le guide ViewPager existant. Notez que LeanbackViewPager est basé sur ViewPager, et non sur ViewPager2.

Voici un exemple:

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);

Limites

La bibliothèque Leanback Tabs présente des limites au niveau des thèmes qu'elle prend en charge et de la gestion du déplacement du curseur.

Thèmes compatibles

Seuls les thèmes dérivés de Theme.AppCompat sont acceptés. TabLayout contient une contrainte d'application des thèmes, qui empêche l'utilisation d'un thème non descendant de Theme.AppCompat. Vous pouvez également utiliser le thème de pont du kit d'interface utilisateur Leanback.

Sélectionner le déplacement des onglets vers le haut

Lorsque la hauteur de la mise en page est supérieure à la hauteur de l'écran et que vous appuyez sur le bouton du pavé directionnel vers le haut, la commande revient dans l'onglet au lieu de rester à l'intérieur du fragment et d'accéder à un élément au-dessus (voir la figure 1). Pour gérer ce problème, le contenu du fragment doit remplacer la recherche ciblée. Par exemple, utilisez RowsSupportFragment. BrowseSupportFragment ne peut pas être utilisé dans un onglet, car il comporte une méthode de recherche de ciblage ignorée, ce qui empêche le focus de revenir à l'onglet.

Figure 1 : Le bouton du pavé directionnel vers le haut déplace le curseur sur un onglet au lieu de l'élément précédent.