Cómo capturar y liberar el enfoque

En los modos de interacción especializados (como un lienzo de dibujo integrado, la superficie de un control de juegos o un diálogo de entrada modal), es posible que tu app necesite bloquear temporalmente el enfoque en un solo componente y evitar que las teclas de Tab o direccionales salgan de la navegación.

Captura el enfoque

Para capturar el enfoque, invoca captureFocus() en un FocusRequester:

val focusRequester = remember { FocusRequester() }

Box(
    modifier = Modifier
        .focusRequester(focusRequester)
        .focusable()
        .onFocusChanged { focusState ->
            if (focusState.isFocused) {
                focusRequester.captureFocus()
            }
        }
)

Mientras se captura el enfoque, las teclas de navegación de enfoque estándar (como Tab) no mueven el enfoque a los componentes vecinos.

Cómo liberar el enfoque

Para salir del estado de captura y restablecer la navegación normal por enfoque en la IU, llama a freeFocus():

IconButton(
    onClick = {
        focusRequester.freeFocus()
    }
) {
    Icon(Icons.Default.Close, contentDescription = "Exit focus lock")
}