Каждый раз, когда фокус меняется в дереве композиции, Compose запускает событие фокуса, которое могут наблюдать родительские и дочерние модификаторы. С помощью модификатора onFocusChanged можно отслеживать переходы между состояниями фокуса, запрашивать текущие свойства фокуса и запускать обновления интерфейса на основе состояния.
Отслеживание состояния фокуса с помощью onFocusChanged
Модификатор 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, если определенная composable-функция, к которой прикреплен этот модификатор, в данный момент удерживает активный фокус ввода.hasFocus– возвращаетtrue, если эта composable-функция или любая из ее дочерних функций сейчас выделена. Это полезно для родительских контейнеров (например, карточек или панелей инструментов), которым необходимо знать, когда активен любой дочерний элемент внутри них.isCaptured. Возвращаетtrue, если фокус в данный момент заблокирован на элементе (например, во время модальных подовзаимодействий с использованиемcaptureFocus()). Попытка переместить фокус на другие элементы не очищает фокус.
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
Рекомендуем
- Примечание. Текст ссылки показывается, когда JavaScript отключен.
- Цели фокусировки
- Обозначение фокуса
- Программный запрос фокуса
- Захват и освобождение фокуса