Przenieś i wyczyść zaznaczenie

FocusManager umożliwia przesunięcie ostrości w określonym kierunku lub całkowite jej usunięcie. Użyj FocusRequester do bezpośredniego kierowania na komponent (patrz Programowe żądanie ustawienia ostrości).

Kierunkowe przesuwanie ostrości za pomocą FocusManager

Aby przenieść zaznaczenie programowo w kierunku względnym:

  1. Uzyskaj instancję FocusManager za pomocą LocalFocusManager.current.
  2. Zadzwoń pod numer moveFocus() z wartością FocusDirection (Next, Previous, Up, Down, Left, Right, Enter lub Exit).

val focusManager = LocalFocusManager.current

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

Wyraźne skupienie

Aby usunąć fokus z elementu, który go obecnie ma (np. gdy użytkownik naciśnie klawisz Esc), wywołaj funkcję clearFocus():

val focusManager = LocalFocusManager.current

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

Funkcja clearFocus() akceptuje opcjonalny parametr force: Boolean = false:

  • force = false (domyślnie): uwzględnia blokady fokusu i nie usuwa fokusu, jeśli aktywny komponent przechwycił fokus.
  • force = true: bezwarunkowo usuwa zaznaczenie, nawet jeśli komponent je przechwycił.