android android-recyclerview android-tv

Android TV RecyclerView enfoque de interacción



android-recyclerview android-tv (3)

  1. Para un RecyclerView regular, tuve que especificar:

    android: descendantFocusability = "beforeDescendants"

también android: nextFocusDown = "@ + id / recyclerviewId" está configurado para enviar el foco al RV en sí.

  1. La única solución que veo es un oyente clave para seleccionar un elemento para colocar currentPosition + spancount.

Actualmente estoy usando un RecyclerView regular con GridLayoutManager con diferentes spanCount dependen del viewType para una aplicación de Android TV. Todo funciona bien, pero tengo 2 problemas:

  1. Si mantiene presionado el dpad hacia abajo para desplazarse rápidamente entre los elementos, a veces el enfoque se pierde en una vista que no es un elemento secundario de RecyclerView.
  2. ¿Cómo puedo decirle a RecyclerView que mantenga la vista enfocada actual en el centro de la cuadrícula?

Parece que los problemas enumerados se solucionan mediante el uso de VerticalGridView de la biblioteca LeanBack , pero el LayoutManger que utiliza es interno y no es compatible con spanCount .


La vista de Recycler funciona bien con Android TV. Las posibles soluciones que puede incluir son:

1.add focusable y focusableInTouchode para ver. Agregue focusListner a través del código y solicite el enfoque cada vez que se haga clic en la vista.

2. Para mantener el elemento enfocado de Recycler View en el centro, debe anular el administrador de diseño como en este ejemplo.

RecyclerView smoothScroll para posicionar en el centro. androide

o

use layoutManager.scrollToPositionWithOffset (posición, desplazamiento) donde la posición de la vista centrada en la posición y el desplazamiento es el ancho / 2 de la vista del reciclador.


Puede intentar comprobar esta workaround para el bug con RecycleView focus scrolling cuando navega con d-pad.

Aquí está la pregunta de SO para eso.

El problema aquí es que el GridLayoutManager usa la implementación de onFocusSearchFailed() de onFocusSearchFailed() que se llama cuando el foco se acerca al borde interno de RecyclerView . LinearLayoutManager''s implementación LinearLayoutManager''s solo ofrece el elemento primero / último (depende de la dirección de desplazamiento). Por lo tanto, el foco salta al primer / último elemento de la nueva fila.

Entonces, tal vez esta solución solucione su problema o le dé una idea de cómo resolverlo.