Cómo mover y borrar el enfoque

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

Movimiento de enfoque direccional con FocusManager

Para mover el enfoque de manera 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 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 de cualquier elemento que lo tenga actualmente (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ó.