Jedes Mal, wenn sich der Fokus im Kompositionsbaum ändert, löst Compose ein Fokusereignis aus, das von übergeordneten und untergeordneten Modifikatoren beobachtet werden kann. Mit dem Modifikator onFocusChanged können Sie auf Übergänge des Fokusstatus warten, aktuelle Fokuseigenschaften abfragen und statusgesteuerte UI-Updates auslösen.
Fokusstatus mit onFocusChanged beobachten
Der Modifikator onFocusChanged stellt ein FocusState-Objekt bereit, wenn ein Element den Fokus erhält oder verliert.
Sie können beispielsweise Fokusänderungen beobachten, um den Status einer benutzerdefinierten Komponente zu aktualisieren (z. B. die Rahmenfarbe eines Elements ändern oder eine Animation auslösen):
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
In diesem Beispiel speichert remember die Rahmenfarbe über Neuzusammensetzungen hinweg und die Rahmenfarbe wird aktualisiert, wenn sich der Fokusstatus des Elements ändert.
FocusState-Eigenschaften
Das an onFocusChanged übergebene FocusState-Objekt bietet drei wichtige Eigenschaften:
isFocused: Gibttruezurück, wenn das spezifische Composable, an das dieser Modifikator angehängt ist, derzeit den aktiven Eingabefokus hat.hasFocus: Gibttruezurück, wenn diese zusammensetzbare Funktion oder eine ihrer untergeordneten zusammensetzbaren Funktionen derzeit im Fokus ist. Das ist nützlich für übergeordnete Container (z. B. Karten oder Symbolleisten), die wissen müssen, wann ein untergeordnetes Element aktiv ist.isCaptured: Gibttruezurück, wenn der Fokus derzeit auf das Element beschränkt ist (z. B. während modaler Unterinteraktionen mitcaptureFocus()). Wenn der Fokus erfasst ist, wird er nicht gelöscht, wenn versucht wird, ihn auf andere Elemente zu verschieben.
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
Empfehlungen für Sie
- Hinweis: Der Linktext wird angezeigt, wenn JavaScript deaktiviert ist.
- Fokusziele
- Fokusstatus angeben
- Fokus programmatisch anfordern
- Fokus erfassen und freigeben