Bibliotecas del kit de herramientas de la IU de Leanback

Compila mejor con Compose
Crea IU atractivas con muy poco código usando Jetpack Compose para el SO Android TV.

El kit de herramientas de interfaz de usuario de Leanback ofrece algunas bibliotecas específicas de TV exclusivas para Apps desarrolladas para el SO Android TV. Estas bibliotecas incluyen lo siguiente:

  • Biblioteca Leanback: Proporciona plantillas de IU que simplifica la creación de apps para Android TV.
  • Preferencias de Leanback biblioteca: proporciona pantallas de preferencias y configuración que son coherentes con la plataforma, pero puedes usar un tema para que coincida con tu app.
  • Biblioteca de Leanback Paging: Admite lo siguiente: El modelo de paginación de AndroidX para ObjectAdapters, que se usa comúnmente con el Plantillas Leanback.
  • Biblioteca Leanback Tabs: admite pestañas la navegación GPS en Android TV.

Biblioteca de paginación Leanback

La paginación dentro del kit de herramientas de la IU de Leanback funciona de la misma manera que en AndroidX. Paging 3, que simplifica agregar paginación a una RecyclerView.Adapter Con la biblioteca de Paging Leanback, el adaptador que se expone suele ser un ObjectAdapter en su lugar, por lo que la biblioteca agrega compatibilidad de paginación a ObjectAdapter.

Para agregar un adaptador de paginación a tu app, primero agrega la dependencia de biblioteca a tu proyecto:

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

Luego, sigue el Documentación de Paging 3 con androidx.leanback.paging.PagingDataAdapter en lugar de androidx.paging.PagingDataAdapter La única diferencia es que ahora puedes para pasar un Presenter o PresenterSelector Esto funciona en cualquier lugar en el que normalmente usarías un ObjectAdapter, como en un 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);

Biblioteca de Leanback Tabs

Las plantillas del kit de herramientas de IU de Leanback ofrecen navegación lateral en el pantalla de navegación: Cómo agregar una fila de pestañas horizontalmente en la parte superior de la aplicación, puedes usar Leanback Tabs en su lugar.

Agrega la dependencia de biblioteca a tu proyecto:

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

Luego, implementa pestañas con LeanbackTabLayout y LeanbackViewPager. Para ello, haz lo siguiente: siguiendo el plan de Guía de ViewPager. Ten en cuenta que LeanbackViewPager se basa en ViewPager, no en ViewPager2.

A continuación, se muestra un ejemplo:

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

Limitaciones

La biblioteca de Leanback Tabs tiene limitaciones en los temas que admite y en cómo el enfoque y movimiento.

Temas compatibles

Solo se admiten los temas que derivan de Theme.AppCompat. TabLayout contiene una restricción de aplicación de temas, que evita que cualquier tema no descendiente de Theme.AppCompat. También puedes usar el tema puente para Kit de herramientas de IU de Leanback.

Enfocar movimiento de las pestañas a la parte superior

Cuando la altura de diseño es mayor que la de la pantalla y presionas el pad direccional botón Arriba, el control vuelve a la pestaña en lugar de permanecer dentro del fragmento y navegar hasta un elemento que se encuentra sobre él (consulta la figura 1). Para resolver este problema, el contenido dentro del fragmento debe anular la búsqueda de enfoque; por ejemplo, usa RowsSupportFragment BrowseSupportFragment no se puede utilizar dentro de una pestaña, ya que tiene un método de búsqueda de enfoque anulado que evita que el enfoque vuelva a la pestaña.

.
. Figura 1: El botón hacia arriba del pad direccional mueve el enfoque a la pestaña en lugar del elemento anterior.