Za każdym razem, gdy w drzewie kompozycji zmienia się fokus, Compose wywołuje zdarzenie focus, które mogą obserwować modyfikatory nadrzędne i podrzędne. Możesz użyć modyfikatora onFocusChanged, aby monitorować przejścia stanu fokusu, wysyłać zapytania o bieżące właściwości fokusu i wywoływać aktualizacje interfejsu oparte na stanie.
Obserwowanie stanu aktywności za pomocą funkcji onFocusChanged
Modyfikator onFocusChanged udostępnia obiekt FocusState, gdy element zyskuje lub traci fokus.
Możesz na przykład obserwować zmiany fokusu, aby aktualizować stan komponentu niestandardowego (np. zmieniać kolor obramowania elementu lub wywoływać animację):
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
W tym przykładzie remember przechowuje kolor obramowania w różnych kompozycjach, a kolor obramowania jest aktualizowany za każdym razem, gdy zmienia się stan fokusu elementu.
Właściwości FocusState
Obiekt FocusState przekazywany do funkcji onFocusChanged zawiera 3 kluczowe właściwości:
isFocused: zwraca wartośćtrue, jeśli konkretny komponent, do którego jest dołączony ten modyfikator, ma obecnie aktywny fokus.hasFocus: zwraca wartośćtrue, jeśli ten komponent lub którykolwiek z jego komponentów podrzędnych jest obecnie zaznaczony. Jest to przydatne w przypadku kontenerów nadrzędnych (takich jak karty lub paski narzędzi), które muszą wiedzieć, kiedy któreś z dzieci w nich jest aktywne.isCaptured: zwraca wartośćtrue, jeśli fokus jest obecnie zablokowany na elemencie (np. podczas interakcji podrzędnych w oknie modalnym z użyciemcaptureFocus()). Podczas przechwytywania próby przeniesienia fokusu na inne elementy nie powodują jego wyczyszczenia.
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Punkty ostrości
- Wskazywanie stanu aktywności
- Programowe żądanie fokusu
- Przechwytywanie i zwalnianie fokusu