Demander le focus de manière programmatique

Dans certains flux utilisateur, votre application doit déplacer explicitement la sélection vers un composant spécifique. Par exemple, lorsqu'un utilisateur clique sur un bouton "Rechercher", vous pouvez automatiquement placer le curseur dans le champ de saisie de la recherche.

Utiliser FocusRequester

Pour demander explicitement la sélection :

  1. Créez et mémorisez une instance FocusRequester : val focusRequester = remember { FocusRequester() }.
  2. Associez le FocusRequester au composable cible à l'aide du modificateur focusRequester.
  3. Appelez requestFocus() dans un rappel d'événement (tel que onClick) ou une portée de coroutine.

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")
}

Définir le focus initial de l'écran

Pour placer la sélection initiale sur un composant spécifique lorsqu'un écran s'affiche pour la première fois, déclenchez requestFocus() dans un LaunchedEffect(Unit) :

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

Lorsque vous naviguez entre des conteneurs ou revenez d'un autre écran, vous pouvez également associer focusRestorer() aux conteneurs parents pour rétablir automatiquement la sélection sur le dernier enfant sélectionné. Pour en savoir plus, consultez le guide Restaurer la mise au point.