Los usuarios pueden mover el enfoque del teclado por los elementos de la IU con la tecla Tab o las teclas direccionales (flechas o pad direccional):
- Tab / Mayúsculas + Tab: Mueve el enfoque hacia adelante o hacia atrás en el orden de apariencia unidimensional.
- Teclas de dirección: Mueven el enfoque en dos dimensiones (Arriba, Abajo, Izquierda y Derecha).
Recorrido del enfoque unidimensional
En el recorrido del enfoque unidimensional, la tecla Tab avanza el enfoque por la IU según el orden de aparición visual en la pantalla.
Por ejemplo, cuando se organizan cuatro botones en filas, ocurre lo siguiente:
Column { Row { Button(onClick = { /* ... */ }) { Text("1st") } Button(onClick = { /* ... */ }) { Text("2nd") } } Row { Button(onClick = { /* ... */ }) { Text("3rd") } Button(onClick = { /* ... */ }) { Text("4th") } } }
Si presionas la tecla Tab, el enfoque se mueve de forma secuencial por los botones en el siguiente orden:
- Primer botón (arriba a la izquierda)
- Segundo botón (extremo superior)
- Tercer botón (abajo a la izquierda)
- Cuarto botón (extremo inferior)
Si presionas Tab en el elemento final, se vuelve al primer objetivo de enfoque. Si presionas Mayúsculas + Tab, el enfoque se moverá en orden inverso.
Recorrido del enfoque bidimensional
Si presionas las teclas de flecha del teclado o usas un pad direccional, se activa el recorrido de enfoque en dos dimensiones.
En el recorrido bidimensional, el sistema inspecciona las coordenadas geométricas y los límites espaciales de los elementos de la IU para determinar el objetivo más cercano en la dirección solicitada.
El recorrido del enfoque en dos dimensiones no se une. Si el usuario presiona la tecla Abajo mientras se enfoca en el elemento que se encuentra más abajo, el enfoque permanecerá en ese elemento en lugar de saltar a la parte superior de la pantalla.
Restablece el recorrido del enfoque con clics del puntero
Cuando cambies entre un teclado físico y un mouse o panel táctil en dispositivos de escritorio o con pantalla grande, ten en cuenta lo siguiente:
- Borrar el enfoque cuando se presiona o se hace clic: Cuando se hace clic o se presiona un espacio no interactivo con un mouse o un panel táctil, se quita el enfoque del elemento activo.
- Reiniciar el recorrido: Después de que se borra el enfoque, la siguiente vez que se presiona la tecla Tab, se reinicia el recorrido unidimensional en el primer objetivo de enfoque en el orden de apariencia visual, en lugar de reanudarse desde el elemento activo anterior. Es igual que el recorrido del enfoque bidimensional. Las teclas de dirección mueven el enfoque del teclado al objetivo de enfoque más cercano en la dirección solicitada.
Para obtener detalles sobre cómo borrar el enfoque de manera programática, consulta Cómo mover y borrar el enfoque.
Personaliza el orden de recorrido del enfoque
Puedes personalizar el comportamiento de recorrido con el modificador focusProperties.
Personaliza el orden de recorrido unidimensional
Para anular el recorrido unidimensional,
especifica la propiedad next o previous
con un FocusRequester:
- Crea un objeto
FocusRequesterconremember { FocusRequester() }. - Adjunta el
FocusRequesteral elemento componible de destino con el modificadorfocusRequester. - Aplica el modificador
focusPropertiesal elemento componible de origen y asignaFocusRequesteranext(para Tab) oprevious(para Mayúsculas + Tab).
val (first, second, third) = remember { FocusRequester.createRefs() } Column { Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(first) .focusProperties { next = third } ) { Text("First (Tab jumps to Third)") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(second) ) { Text("Second") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(third) ) { Text("Third") } }
Cómo personalizar el orden de recorrido bidimensional
Del mismo modo, puedes anular el recorrido del enfoque bidimensional asignando instancias de FocusRequester a up, down, start, end, left o right dentro de focusProperties:
val (topButton, bottomButton) = remember { FocusRequester.createRefs() } Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(topButton) .focusProperties { down = bottomButton right = bottomButton } ) { Text("Top button") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(bottomButton) ) { Text("Bottom button") }
Para bloquear la navegación de enfoque en una dirección específica (por ejemplo, en los límites del diseño), asigna FocusRequester.Cancel a esa propiedad (por ejemplo, down = FocusRequester.Cancel). Para retener de forma explícita el algoritmo de recorrido predeterminado del sistema para una dirección determinada, asigna FocusRequester.Default.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- Objetivos de enfoque
- Cómo enfocar los campos de texto
- Agrupa los destinos de enfoque
- Cómo mover y borrar el enfoque
- Cómo solicitar el enfoque de manera programática
- Cómo probar la navegación con enfoque