Demander le focus de manière programmatique

Dans certains parcours 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 placer automatiquement la sélection dans le champ de saisie de recherche.

Utiliser FocusRequester

Pour demander explicitement la sélection :

  1. Créez et mémorisez une instance FocusRequester : val focusRequester = remember { FocusRequester() }.
  2. Associez FocusRequester au composable cible à l'aide du modificateur focusRequester.
  3. Appelez requestFocus() dans un rappel d'événement (tel que onClick) ou un champ d'application 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 le curseur initial 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 que vous revenez d'un autre écran, vous pouvez également associer focusRestorer() aux conteneurs parents pour que le curseur revienne automatiquement sur le dernier enfant sélectionné. Pour en savoir plus, consultez le guide Restaurer la mise au point.