Przenieś i wyczyść zaznaczenie

FocusManager umożliwia przesuwanie zaznaczenia w określonym kierunku lub całkowite jego usunięcie. Użyj FocusRequester do bezpośredniego kierowania komponentu (patrz Programowe ustawianie zaznaczenia).

Kierunkowe przesuwanie zaznaczenia za pomocą FocusManager

Aby przenieść zaznaczenie automatycznie we względnym kierunku:

  1. Uzyskaj instancję FocusManager za pomocą LocalFocusManager.current.
  2. Wywołaj 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źny punkt skupienia

Aby usunąć zaznaczenie z elementu, który jest obecnie zaznaczony (np. gdy użytkownik naciśnie klawisz Esc), wywołaj 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ślna): uwzględnia blokady zaznaczenia i nie usuwa zaznaczenia, jeśli aktywny komponent jest zaznaczony.
  • force = true: bezwarunkowo usuwa zaznaczenie, nawet jeśli komponent jest zaznaczony.