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

В специализированных режимах взаимодействия (например, на встроенном холсте для рисования, поверхности игрового контроллера или в модальном диалоговом окне ввода) вашему приложению может потребоваться временно заблокировать фокус на одном компоненте и предотвратить переход на другие компоненты с помощью клавиши 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")
}

{% verbatim %} {% endverbatim %} {% verbatim %} {% endverbatim %}