Fokus programmatisch anfordern

In einigen Nutzerflows muss der Fokus in Ihrer Anwendung explizit auf eine bestimmte Komponente verschoben werden. Wenn ein Nutzer beispielsweise auf die Schaltfläche „Suchen“ klickt, soll der Fokus automatisch auf das Such-Eingabefeld gesetzt werden.

FocusRequester verwenden

So fordern Sie den Fokus explizit an:

  1. FocusRequester-Instanz erstellen und speichern: val focusRequester = remember { FocusRequester() }.
  2. Hängen Sie FocusRequester mithilfe des Modifikators focusRequester an die Ziel-Composable an.
  3. Rufen Sie requestFocus() in einem Ereignis-Callback (z. B. onClick) oder einem Coroutine-Bereich auf.

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

Button(onClick = { focusRequester.requestFocus() }) {
    Text("Request focus on TextField")
}

Fokus auf den Startbildschirm festlegen

Wenn Sie den anfänglichen Fokus auf eine bestimmte Komponente legen möchten, wenn ein Bildschirm zum ersten Mal angezeigt wird, lösen Sie requestFocus() in einem LaunchedEffect(Unit) aus:

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

Wenn Sie zwischen Containern wechseln oder von einem anderen Bildschirm zurückkehren, können Sie focusRestorer() auch an übergeordnete Container anhängen, um den Fokus automatisch auf das zuletzt fokussierte untergeordnete Element zurückzusetzen. Weitere Informationen finden Sie im Leitfaden zum Wiederherstellen des Fokus.