Za każdym razem, gdy fokus zmienia się w drzewie kompozycji, Compose wyzwala zdarzenie fokusu, które mogą obserwować modyfikatory nadrzędne i podrzędne. Możesz użyć modyfikatora onFocusChanged, aby monitorować przejścia stanu zaznaczenia, wysyłać zapytania o bieżące właściwości zaznaczenia i wywoływać aktualizacje interfejsu zależne od stanu.
Obserwowanie stanu zaznaczenia za pomocą onFocusChanged
Modyfikator onFocusChanged udostępnia obiekt FocusState, gdy element uzyskuje lub traci zaznaczenie.
Możesz na przykład obserwować zmiany zaznaczenia, aby aktualizować stan komponentu niestandardowego (np. zmieniać kolor obramowania elementu lub uruchamiać 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 między rekompozycjami, a kolor obramowania jest aktualizowany przy każdej zmianie stanu zaznaczenia elementu.
Właściwości FocusState
Obiekt FocusState przekazywany do onFocusChanged zawiera 3 kluczowe właściwości:
isFocused: zwraca wartośćtrue, jeśli określony element kompozycyjny, do którego jest dołączony ten modyfikator, jest obecnie aktywny.hasFocus: zwraca wartośćtrue, jeśli ten element kompozycyjny lub którykolwiek z jego elementó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órykolwiek z ich elementów podrzędnych jest aktywny.isCaptured: zwracatrue, jeśli zaznaczenie jest obecnie zablokowane na elemencie (np. podczas interakcji podrzędnych w oknie modalnym przy użyciucaptureFocus()). Próba przeniesienia zaznaczenia na inne elementy nie powoduje usunięcia zaznaczenia.
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.
- Cele skupienia
- Wskazywanie stanu aktywności
- Zautomatyzowane żądanie zaznaczenia
- Przechwytywanie i zwalnianie zaznaczenia