Uchwyć i zwolnij fokus

W specjalnych trybach interakcji (takich jak wbudowany obszar roboczy do rysowania, powierzchnia kontrolera do gier lub modalne okno dialogowe wprowadzania danych) aplikacja może wymagać tymczasowego zablokowania zaznaczenia na jednym komponencie i uniemożliwienia nawigacji za pomocą klawisza Tab lub klawiszy kierunkowych.

Ustawianie ostrości

Aby ustawić zaznaczenie, wywołaj captureFocus() na FocusRequester:

val focusRequester = remember { FocusRequester() }

Box(
    modifier = Modifier
        .focusRequester(focusRequester)
        .focusable()
        .onFocusChanged { focusState ->
            if (focusState.isFocused) {
                focusRequester.captureFocus()
            }
        }
)

Gdy fokus jest przechwycony, standardowe klawisze nawigacji fokusem (takie jak Tab) nie przenoszą fokusu na sąsiednie komponenty.

Zwolnienie nacisku

Aby wyjść ze stanu przechwycenia i przywrócić normalną nawigację przy użyciu zaznaczenia w interfejsie, wywołaj freeFocus():

IconButton(
    onClick = {
        focusRequester.freeFocus()
    }
) {
    Icon(Icons.Default.Close, contentDescription = "Exit focus lock")
}