Fokus programmatisch anfordern

In einigen User-Flows muss Ihre Anwendung den Fokus explizit auf eine bestimmte Komponente verschieben. Wenn ein Nutzer beispielsweise auf die Schaltfläche „Suchen“ klickt, möchten Sie möglicherweise den Fokus automatisch auf das Sucheingabefeld legen.

FocusRequester verwenden

So fordern Sie den Fokus explizit an:

  1. Erstellen Sie eine FocusRequester-Instanz und merken Sie sich diese: val focusRequester = remember { FocusRequester() }.
  2. Hängen Sie die FocusRequester mit dem Modifikator focusRequester an die Ziel-Composable an.
  3. Rufen Sie requestFocus() in einem Ereignis-Callback (z. B. onClick) oder einem Koroutinenbereich 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 Startbildschirm festlegen

Wenn Sie den Fokus beim ersten Erscheinen eines Bildschirms auf eine bestimmte Komponente legen möchten, lösen Sie requestFocus() innerhalb eines 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 Fokus wiederherstellen.