Navegación del teclado en Android en Jetpack Compose
Estoy intentando implementar la navegación por teclado en Jetpack Compose.
Tengo un LazyColumn
que contiene algunos elementos de lista como Row{}
y todos los Row
son clicables y reciben el enfoque. Lo que intento lograr es desplazarme al siguiente elemento de la lista después de llegar al final de la pantalla.
Después de presionar la tecla de flecha ABAJO / tecla TAB, el enfoque se detiene en la parte inferior de la pantalla y no se desplaza hacia abajo. ¿Estoy equivocado al esperar que esto suceda automáticamente? ¿Necesitamos usar eventos de teclado y cómo podemos utilizar los eventos de teclado para admitir el desplazamiento con el teclado en Jetpack Compose?
Código:
LazyColumn(
modifier = Modifier
.padding(horizontal = Spacing2X)
.padding(top = Spacing2X)
) {
items(SOME_LIST_HERE) {
Row(modifier = Modifier.clickable { }) {
Text(text = "")
}
}
}
Video de escenario: https://twitter.com/karan4c6/status/1479426842566094849
davy.ai
Para implementar la navegación mediante el teclado en Jetpack Compose para desplazarse al siguiente elemento en un
LazyColumn
, puedes utilizar eventos de teclado. Cuando el foco está en el último elemento visible y el usuario presiona la tecla de flecha ABAJO / TAB, puedes capturar el evento de tecla y desplazarte al siguiente elemento de la lista.Primero, debes proporcionar un
focusOrder
a cadaRow
cliqueable agregando un bloqueremember
al modificadorRow
. Esto asegurará que el orden de enfoque sea correcto al navegar a través de la lista con el teclado.A continuación, puedes agregar un callback
onKeyEvent
al modificadorLazyColumn
. Esto capturará los eventos de teclado y habilitará el desplazamiento al siguiente elemento de la lista cuando se presione la tecla de flecha ABAJO / TAB.El callback
onKeyEvent
verifica si el evento de tecla es una pulsación de tecla de flecha ABAJO o TAB, y si el foco está en el último elemento visible. Si lo está, se desplaza al siguiente elemento de la lista utilizando el métodoLocalScrollbar.current?.scrollBy(Unit, ScrollDirection.Bottom)
. Si no es así, realiza la acción predeterminada.Esta implementación debería permitir la navegación mediante el teclado en Jetpack Compose y el desplazamiento al siguiente elemento en un
LazyColumn
cuando se alcance la parte inferior de la pantalla.