Sélectionner dans Compose

Lorsqu'un utilisateur interagit avec votre application, il le fait souvent en appuyant sur des éléments de son écran. Cependant, ce n'est pas la seule forme d'interaction. Voici d'autres formes d'interactions:

  • Un utilisateur de ChromeOS peut utiliser les touches fléchées de son clavier physique pour parcourir l'écran.
  • Une personne jouant à un jeu peut utiliser la manette de jeu associée pour parcourir le menu du jeu.
  • Un utilisateur de l'application mobile peut faire défiler les éléments à l'aide du clavier à l'écran.

Dans ces cas, il est important de suivre quel composant est actif à un moment donné, ce que nous appelons la attention. Les éléments à l'écran doivent être axés dans un ordre logique. Jetpack Compose propose une méthode par défaut de gestion de l'objectif qui est correcte dans la plupart des cas. Toutefois, dans certains cas, vous devrez peut-être modifier ce comportement par défaut.

Les pages suivantes décrivent comment utiliser le focus dans votre application:

  • Modifier l'ordre de sélection par défaut: explique comment modifier l'ordre de sélection par défaut, ajouter des groupes de sélection et désactiver le curseur d'un composable.
  • Modifier le comportement de sélection: décrit comment demander, capturer et libérer la sélection, et comment rediriger la sélection lorsque l'utilisateur accède à un écran.
  • Réagir à la mise au point: explique comment réagir aux changements de mise au point, ajouter des repères visuels aux éléments et comprendre l'état de focalisation d'un élément.

Ordre de balayage du curseur par défaut

Avant d'examiner le comportement par défaut de la recherche ciblée, il est important de comprendre le concept de niveau dans la hiérarchie: d'une manière générale, nous pouvons dire que deux Composables sont au même niveau lorsqu'ils sont frères, ce qui signifie qu'ils ont les mêmes parents. Par exemple, les éléments d'une Column se trouvent au même niveau. Revenir à un niveau signifie passer d'un enfant à son parent Composable, ou, en conservant le même exemple, revenir d'un élément à un Column qui le contient. Passer d'un niveau à l'autre est l'inverse, du parent Column aux éléments contenus. Ce concept peut être appliqué à chaque Composable pouvant contenir d'autres Composables.

La navigation dans l'interface utilisateur peut s'effectuer de plusieurs manières, dont la plupart des utilisateurs le connaissent déjà:

  • TAB: navigation unidimensionnelle, avancer ou revenir en arrière La navigation TAB fait avancer le curseur vers l'élément suivant ou précédent dans la hiérarchie. Par défaut, Compose suit la déclaration de Composables. La navigation unidirectionnelle peut être effectuée via la touche tab d'un clavier ou le contour rotatif d'une montre. Ce type de recherche ciblée permet d'accéder à chaque élément à l'écran.
  • Touches fléchées: navigation en deux dimensions, en direction à gauche, à droite, en haut ou en bas La navigation en deux dimensions peut être effectuée à l'aide d'un pavé directionnel sur un téléviseur ou de touches fléchées sur un clavier, et son ordre de balayage ne permet de parcourir que les éléments d'un niveau donné. Vous pouvez utiliser le centre du pavé directionnel et le bouton "Retour" pour descendre et remonter à un autre niveau.

Prenons l'exemple de la capture d'écran ci-dessous. Elle comporte quatre boutons, l'un en dessous de l'autre, et vous souhaitez les faire défiler par ordre d'apparition. Jetpack Compose propose ce comportement prêt à l'emploi: le kit d'outils vous permet de parcourir chaque composable dans l'ordre vertical à l'aide de la touche tab, ou de déplacer le curseur en appuyant sur la flèche haut ou bas.

Capture d'écran d'une liste de boutons placés verticalement l'un en dessous de l'autre dans un petit facteur de forme.
Figure 1. Liste de boutons affichés dans un petit facteur de forme

Lorsque vous passez à un autre type de mise en page, les choses changent un peu. Si votre mise en page comporte plusieurs colonnes, comme la mise en page ci-dessous, Jetpack Compose vous permet de les parcourir sans avoir à ajouter de code. Si vous appuyez sur la touche tab, Jetpack Compose met automatiquement en surbrillance les éléments dans l'ordre de leur déclaration, de la première à la quatrième. Utilisez les touches fléchées du clavier pour que la sélection suive la direction souhaitée dans l'espace 2D.

Column {
    Row {
        TextButton({ }) { Text("First field") }
        TextButton({ }) { Text("Second field") }
    }
    Row {
        TextButton({ }) { Text("Third field") }
        TextButton({ }) { Text("Fourth field") }
    }
}

Les Composables sont déclarés dans deux Rows, et les éléments de sélection sont déclarés dans l'ordre, du premier au quatrième. Lorsque vous appuyez sur la touche tab, l'ordre de sélection est le suivant:

Capture d'écran d'une liste de boutons placés sur deux colonnes côte à côte dans un facteur de forme plus grand.
Figure 2. Liste de boutons placés sur deux colonnes côte à côte dans un facteur de forme plus grand

Dans l'extrait ci-dessous, vous déclarez les articles dans Columns plutôt que dans Rows:

Row {
    Column {
        TextButton({ }) { Text("First field") }
        TextButton({ }) { Text("Second field") }
    }
    Column {
        TextButton({ }) { Text("Third field") }
        TextButton({ }) { Text("Fourth field") }
    }
}

Cette mise en page balaie les éléments verticalement, de haut en bas, du début de l'écran vers la fin:

Capture d'écran d'une liste de boutons placés sur deux colonnes côte à côte dans un facteur de forme plus grand.
Figure 3. Liste de boutons placés sur deux colonnes côte à côte dans un facteur de forme plus grand

Bien que les deux exemples précédents diffèrent en termes de navigation unidirectionnelle, ils offrent la même expérience en matière de navigation à deux dimensions. Cela est généralement dû au fait que les éléments affichés à l'écran ont le même emplacement géographique dans les deux exemples. La navigation vers la droite à partir de la première Column déplace le curseur sur la seconde, et la navigation vers le bas à partir du premier Row déplace le curseur vers le niveau inférieur.