Захват и освобождение фокуса

В специализированных режимах взаимодействия (например, при использовании встроенного холста для рисования, поверхности игрового контроллера или модального диалогового окна ввода) приложению может потребоваться временно заблокировать фокус на одном компоненте и запретить переход с помощью клавиши Tab или клавиш со стрелками.

Захват фокуса

Чтобы захватить фокус, вызовите captureFocus() для FocusRequester:

val focusRequester = remember { FocusRequester() }

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

Пока фокус захвачен, стандартные клавиши навигации (например, Tab) не перемещают его на соседние компоненты.

Отменить выделение

Чтобы выйти из состояния захвата и восстановить обычную навигацию по фокусу в интерфейсе, вызовите freeFocus():

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