Pokazuj wskazówki wizualne, aby ułatwić wizualizację skupienia
Wszystkie elementy z motywu Material Design, które można zaznaczyć, mają już styl zaznaczenia pasującego do motywu, może być konieczne dodanie elementów wizualnych, łatwiejszy do zauważenia. Dobrym rozwiązaniem jest zmiana granicy Twój element w kolorze, który ma dobry kontrast z tłem:
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
służy do zapisania koloru obramowania
przekomponowania, a zarys elementu jest aktualizowany za każdym razem,
traci lub traci koncentrację.
Stosuj zaawansowane wskazówki wizualne
Dzięki Jetpack Compose możesz też tworzyć które lepiej pasują do interfejsu użytkownika.
- Najpierw utwórz
IndicationInstance
, który będzie wizualnie rysować w Twoim interfejsie użytkownika pożądanym:private class MyHighlightIndicationInstance(isEnabledState: State<Boolean>) : IndicationInstance { private val isEnabled by isEnabledState override fun ContentDrawScope.drawIndication() { drawContent() if (isEnabled) { drawRect(size = size, color = Color.White, alpha = 0.2f) } } }
- Następnie utwórz
Indication
i zapamiętuj stan zaznaczenia:class MyHighlightIndication : Indication { @Composable override fun rememberUpdatedInstance(interactionSource: InteractionSource): IndicationInstance { val isFocusedState = interactionSource.collectIsFocusedAsState() return remember(interactionSource) { MyHighlightIndicationInstance(isEnabledState = isFocusedState) } } }
- Dodaj do interfejsu użytkownika zarówno
Indication
, jak iInteractionSource
przy użyciu modyfikatoraindication()
:val highlightIndication = remember { MyHighlightIndication() } var interactionSource = remember { MutableInteractionSource() } Card( modifier = Modifier .clickable( interactionSource = interactionSource, indication = highlightIndication, enabled = true, onClick = { } ) ) {}
Określenie stanu skupienia
Ogólnie rzecz biorąc, po każdej zmianie stanu celu FocusEvent
uruchamia się
to drzewo, a rodzice modyfikatora focusable()
mogą go nasłuchiwać za pomocą
onFocusChanged()
.
Jeśli chcesz poznać stan, na którym się skupiasz, możesz używać tych interfejsów API w połączeniu
z modyfikatorem onFocusChanged
:
isFocused
zwraca wartośćtrue
, jeśli funkcja kompozycyjna, do której dołączony jest modyfikator jest zaznaczony- Funkcja
hasFocus
działa podobnie doisFocused
, ale istnieje istotna różnica: zamiast sprawdzać tylko bieżącą wersję, sprawdza, czy element lub jeden z jego dzieci są skupione isCaptured
zwraca wartośćtrue
po przytrzymaniu fokusu. Dzieje się tak w przypadku: np. gdyTextField
zawiera nieprawidłowe dane, tak by próba skupienia nie wyczyści fokusu na inne elementy.
Poniżej znajdują się następujące pola:
Modifier.onFocusChanged {
val isFocused = it.isFocused
val hasFocus = it.hasFocus
val isCaptured= it.isCaptured
}
Polecane dla Ciebie
- Uwaga: tekst linku wyświetla się, gdy JavaScript jest wyłączony
- Zmienianie działania ostrości
- Material Design 2 w Compose
- Obsługa danych wejściowych użytkownika