Переместить и снять фокус

FocusManager позволяет перемещать фокус в определенном направлении или полностью его убирать. Используйте FocusRequester для прямого таргетинга на компоненты (см. раздел Программный запрос фокуса).

Перемещение фокуса в определенном направлении с помощью FocusManager

Чтобы программно переместить фокус в относительном направлении:

  1. Получите экземпляр FocusManager с помощью LocalFocusManager.current.
  2. Вызовите moveFocus() со значением FocusDirection (Next, Previous, Up, Down, Left, Right, Enter или Exit).

val focusManager = LocalFocusManager.current

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

Снять фокус

Чтобы убрать фокус с элемента, на котором он находится (например, когда пользователь нажимает клавишу Esc), вызовите clearFocus():

val focusManager = LocalFocusManager.current

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

Функция clearFocus() принимает необязательный параметр force: Boolean = false:

  • force = false (по умолчанию). Учитывает блокировку фокуса и не снимает его, если активный компонент захватил фокус.
  • force = true – безусловно снимает фокус, даже если он был захвачен компонентом.