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

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

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

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

  1. Создайте и запомните экземпляр FocusRequester : val focusRequester = remember { FocusRequester() } .
  2. Прикрепите FocusRequester к целевому компонуемому объекту, используя модификатор 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() к родительским контейнерам, чтобы автоматически вернуть фокус последнему дочернему контейнеру, на котором был сфокусирован объект. Для получения дополнительной информации см. руководство по восстановлению фокуса .

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