Sposta e cancella lo stato attivo

FocusManager ti consente di spostare il focus in una direzione o di cancellarlo completamente. Utilizza FocusRequester per il targeting diretto dei componenti (vedi Richiedere il focus in modo programmatico).

Spostamento del focus direzionale 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 messa a fuoco

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 (impostazione predefinita): rispetta i blocchi della messa a fuoco e non la cancella se il componente attivo ha acquisito la messa a fuoco.
  • force = true: rimuove in modo incondizionato lo stato attivo anche se un componente lo ha acquisito.