Cómo mover y borrar el enfoque

FocusManager te permite mover el enfoque en una dirección o quitarlo por completo. Usa FocusRequester para la segmentación directa de componentes (consulta Cómo solicitar el enfoque de forma programática).

Movimiento de enfoque direccional con FocusManager

Para mover el enfoque de forma programática en una dirección relativa, haz lo siguiente:

  1. Obtén la instancia de FocusManager con LocalFocusManager.current.
  2. Llama a moveFocus() con un valor de FocusDirection (Next, Previous, Up, Down, Left, Right, Enter o Exit).

val focusManager = LocalFocusManager.current

Button(
    onClick = {
        focusManager.moveFocus(FocusDirection.Next)
    }
) {
    Text("Next Field")
}

Enfoque claro

Para quitar el enfoque del elemento que lo tenga en ese momento (por ejemplo, cuando el usuario presiona la tecla Esc), llama a clearFocus():

val focusManager = LocalFocusManager.current

Box(
    modifier = Modifier.onPreviewKeyEvent { keyEvent ->
        if (keyEvent.key == Key.Escape && keyEvent.type == KeyEventType.KeyUp) {
            focusManager.clearFocus()
            true
        } else {
            false
        }
    }
)

La función clearFocus() acepta un parámetro force: Boolean = false opcional:

  • force = false (predeterminado): Respeta los bloqueos de enfoque y no borrará el enfoque si el componente activo tiene el enfoque capturado.
  • force = true: Borra el enfoque de forma incondicional, incluso si un componente lo capturó.