Les utilisateurs peuvent déplacer le focus clavier sur les éléments d'interface utilisateur à l'aide de la touche Tabulation ou des touches directionnelles (fléchées / pavé directionnel) :
- Tabulation / Maj+Tabulation : permet de sélectionner l'élément suivant ou précédent dans l'ordre d'affichage unidimensionnel.
- Touches directionnelles : déplacez le focus de façon bidimensionnelle (Haut, Bas, Gauche et Droite).
Balayage du curseur unidimensionnel
Dans le balayage du curseur unidimensionnel, la touche Tabulation fait avancer le curseur dans l'UI en fonction de l'ordre d'affichage visuel à l'écran.
Par exemple, lorsque quatre boutons sont disposés sur des lignes :
Column { Row { Button(onClick = { /* ... */ }) { Text("1st") } Button(onClick = { /* ... */ }) { Text("2nd") } } Row { Button(onClick = { /* ... */ }) { Text("3rd") } Button(onClick = { /* ... */ }) { Text("4th") } } }
Appuyer sur la touche Tabulation permet de déplacer le focus de manière séquentielle sur les boutons dans l'ordre suivant :
- 1er bouton (en haut à gauche)
- 2e bouton (extrémité supérieure)
- 3e bouton (en bas à gauche)
- 4e bouton (en bas)
Si vous appuyez sur la touche Tabulation sur le dernier élément, vous revenez à la première cible de focus. Appuyer sur Maj+Tabulation permet de déplacer le focus dans l'ordre inverse.
Balayage du curseur bidimensionnel
Appuyer sur les touches fléchées du clavier ou utiliser un pavé directionnel déclenche un balayage du focus à deux dimensions.
Dans le balayage bidimensionnel, le système inspecte les coordonnées géométriques et les limites spatiales des éléments de l'UI pour déterminer la cible la plus proche dans la direction demandée.
Le balayage du focus bidimensionnel ne se termine pas. Si l'utilisateur appuie sur la touche Bas alors que l'élément le plus bas est sélectionné, la sélection reste sur cet élément au lieu de passer en haut de l'écran.
Réinitialiser la navigation au clavier avec des clics de pointeur
Lorsque vous passez d'un clavier physique à une souris ou un pavé tactile sur un ordinateur de bureau ou un appareil à grand écran :
- Effacer la sélection en appuyant ou en cliquant : cliquer ou appuyer sur un espace non interactif avec une souris ou un pavé tactile permet de désélectionner l'élément actif.
- Redémarrer le parcours : une fois le focus effacé, la prochaine pression sur la touche Tabulation redémarre le parcours unidimensionnel à la première cible de focus dans l'ordre d'apparence visuelle, au lieu de reprendre à partir de l'élément précédemment actif. Il est identique au balayage du focus bidimensionnel. Les touches directionnelles déplacent le focus clavier vers la cible de focus la plus proche dans la direction demandée.
Pour savoir comment effacer la sélection de manière programmatique, consultez Déplacer et effacer la sélection.
Personnaliser l'ordre de balayage du focus
Vous pouvez personnaliser le comportement de déplacement avec le modificateur focusProperties.
Personnaliser l'ordre de parcours unidimensionnel
Pour remplacer le parcours unidimensionnel, spécifiez la propriété next ou previous avec un FocusRequester :
- Créez un objet
FocusRequesteravecremember { FocusRequester() }. - Associez
FocusRequesterau composable cible à l'aide du modificateurfocusRequester. - Appliquez le modificateur
focusPropertiesau composable source et attribuezFocusRequesterànext(pour Tabulation) ouprevious(pour Maj+Tabulation).
val (first, second, third) = remember { FocusRequester.createRefs() } Column { Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(first) .focusProperties { next = third } ) { Text("First (Tab jumps to Third)") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(second) ) { Text("Second") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(third) ) { Text("Third") } }
Personnaliser l'ordre de déplacement bidimensionnel
De même, vous pouvez remplacer le parcours de mise au point bidimensionnel en attribuant des instances FocusRequester à up, down, start, end, left ou right dans focusProperties :
val (topButton, bottomButton) = remember { FocusRequester.createRefs() } Button( onClick = { /* ... */ }, modifier = Modifier .focusRequester(topButton) .focusProperties { down = bottomButton right = bottomButton } ) { Text("Top button") } Button( onClick = { /* ... */ }, modifier = Modifier.focusRequester(bottomButton) ) { Text("Bottom button") }
Pour bloquer la navigation au clavier dans une direction spécifique (par exemple, aux limites de la mise en page), attribuez FocusRequester.Cancel à cette propriété (par exemple, down = FocusRequester.Cancel). Pour conserver explicitement l'algorithme de déplacement par défaut du système pour une direction donnée, attribuez FocusRequester.Default.
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé
- Cibles de mise au point
- Focus dans les champs de texte
- Grouper les cibles de focus
- Déplacer et effacer la sélection
- Demander le focus par programmation
- Tester la navigation au clavier