Sposta e cancella lo stato attivo

FocusManager ti consente di spostare lo stato attivo in modo direzionale o di cancellarlo completamente. Utilizza FocusRequester per il targeting diretto dei componenti (consulta Richiedere lo stato attivo in modo programmatico).

Spostamento direzionale dello stato attivo con FocusManager

Per spostare lo stato attivo in modo programmatico in una direzione relativa:

  1. Ottieni l'istanza FocusManager utilizzando LocalFocusManager.current.
  2. Chiama moveFocus() con un valore FocusDirection (Next, Previous, Up, Down, Left, Right, Enter o Exit).

val focusManager = LocalFocusManager.current

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

Cancella selezione

Per rimuovere lo stato attivo dall'elemento che lo detiene attualmente (ad esempio, quando l'utente preme il tasto Esc), chiama 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 funzione clearFocus() accetta un parametro force: Boolean = false facoltativo:

  • force = false (predefinito): rispetta i blocchi dello stato attivo e non cancella lo stato attivo se il componente attivo ha acquisito lo stato attivo.
  • force = true: cancella incondizionatamente lo stato attivo anche se un componente lo ha acquisito.