Каждый раз, когда в дереве композиции происходит смена фокуса, Compose генерирует событие фокусировки, которое могут отслеживать родительские и дочерние модификаторы. Вы можете использовать модификатор onFocusChanged для отслеживания переходов состояния фокуса, запроса свойств текущего фокуса и запуска обновлений пользовательского интерфейса, управляемых состоянием.
Отслеживайте состояние фокуса с помощью события onFocusChange.
Модификатор onFocusChanged предоставляет объект FocusState всякий раз, когда элемент получает или теряет фокус.
Например, вы можете отслеживать изменения фокуса для обновления состояния пользовательского компонента (например, изменения цвета границы элемента или запуска анимации):
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
В этом примере remember сохраняет цвет границы при каждом изменении композиции, и цвет границы обновляется всякий раз, когда изменяется состояние фокуса элемента.
Свойства FocusState
Объект FocusState , передаваемый в onFocusChanged содержит три ключевых свойства:
-
isFocused: Возвращаетtrueесли конкретный компонент, к которому прикреплен этот модификатор, в данный момент имеет активный фокус ввода. -
hasFocus: Возвращаетtrueесли данный компонент или любой из его дочерних компонентов в данный момент находится в фокусе. Это полезно для родительских контейнеров (например, карточек или панелей инструментов), которым необходимо знать, когда любой дочерний элемент внутри них активен. -
isCaptured: Возвращаетtrueесли фокус в данный момент заблокирован на элементе (например, во время модальных взаимодействий с использованиемcaptureFocus()). Пока фокус захвачен, попытки переместить его на другие элементы не приводят к его сбросу.
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
Рекомендуем вам
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Целевые показатели
- Укажите состояние фокуса
- Программно запросить фокус
- Фокусировка захвата и отпускания