Как программно запросить фокус

В некоторых пользовательских потоках вашему приложению необходимо явно переместить фокус на определенный компонент. Например, когда пользователь нажимает кнопку "Поиск", фокус может автоматически перемещаться в поле ввода.

Используйте FocusRequester

Чтобы явно запросить фокус:

  1. Создайте и запомните экземпляр FocusRequester: val focusRequester = remember { FocusRequester() }.
  2. Прикрепите FocusRequester к целевой composable-функции с помощью модификатора focusRequester.
  3. Вызовите requestFocus() внутри обратного вызова события (например, onClick) или области сопрограммы.

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

Button(onClick = { focusRequester.requestFocus() }) {
    Text("Request focus on TextField")
}

Как настроить фокус начального экрана

Чтобы при первом появлении экрана фокус был на определенном компоненте, активируйте requestFocus() внутри LaunchedEffect(Unit):

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

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