Définir le comportement du conteneur

Pour configurer le comportement du conteneur FlexBox, créez un bloc FlexBoxConfig et fournissez-le à l'aide du paramètre config.

FlexBox(
    config = {
        direction(FlexDirection.Column)
        wrap(FlexWrap.Wrap)
        alignItems(FlexAlignItems.Center)
        alignContent(FlexAlignContent.SpaceAround)
        justifyContent(FlexJustifyContent.Center)
        gap(16.dp)
    }
) { // child items
}

Utilisez FlexBoxConfig pour définir la direction de la mise en page, le comportement de retour à la ligne, l'alignement et les espaces entre les éléments.

Orientation de la mise en page

La fonction direction définit l'axe principal, qui détermine la direction dans laquelle les éléments sont disposés. Il accepte les valeurs suivantes :

  • Row (par défaut) : définit l'axe principal comme horizontal. Dans les paramètres régionaux de gauche à droite, l'ordre sera de gauche à droite, et inversement pour les paramètres régionaux de droite à gauche.
  • RowReverse : inverse la direction de Row.
  • Column : définit l'axe principal comme vertical, de haut en bas.
  • ColumnReverse : inverse la direction de Column.

Aligner les éléments et répartir l'espace supplémentaire

Les sections suivantes décrivent comment aligner les éléments et répartir l'espace supplémentaire le long des axes principal et transversal.

Le long de l'axe principal

Utilisez justifyContent pour répartir les éléments le long de l'axe principal. Le tableau suivant montre le comportement lorsque la direction est Row.

Illustration d'un axe principal horizontal.

Start

Éléments alignés au début de l'axe principal.

Center

Les éléments sont alignés au centre de l'axe principal.

End

Éléments alignés à la fin de l'axe principal.

SpaceBetween

Éléments répartis le long de l'axe principal avec un espace entre eux.

SpaceAround

Éléments répartis le long de l'axe principal avec de l'espace autour.

SpaceEvenly

Éléments répartis le long de l'axe principal avec un espace uniforme autour d'eux.

Le long de l'axe transversal

Utilisez alignItems pour aligner les éléments le long de l'axe transversal sur une seule ligne. Ce comportement peut être remplacé par des éléments individuels à l'aide du modificateur alignSelf.

Les images suivantes illustrent le comportement lorsque la direction est Row :

Illustration d'un axe transversal vertical. Éléments alignés au début de l'axe transversal. Éléments alignés à la fin de l'axe transversal. Éléments alignés au centre de l'axe transversal. Les éléments sont étirés pour remplir l'axe transversal. Éléments alignés sur leur référence le long de l'axe transversal.

Start

End

Center

Stretch

Baseline

Utilisez alignContent pour aligner les lignes sur l'axe transversal et répartir l'espace supplémentaire entre les lignes. Cette propriété ne s'applique que lorsqu'il y a plusieurs lignes (le retour à la ligne est activé). Les images suivantes illustrent le comportement lorsque la direction est Row :

Illustration d'un axe transversal vertical. Plusieurs lignes d'éléments alignées sur le début de l'axe transversal. Plusieurs lignes d'éléments alignées sur la fin de l'axe transversal. Plusieurs lignes d'éléments alignés au centre de l'axe transversal. Plusieurs lignes d'éléments étirées pour remplir l'axe transversal. Plusieurs lignes d'éléments réparties le long de l'axe transversal avec un espace entre elles. Plusieurs lignes d'éléments réparties le long de l'axe transversal, avec de l'espace autour.

Start

End

Center

Stretch

SpaceBetween

SpaceAround

Encapsuler les éléments

Le retour à la ligne permet à un conteneur FlexBox de devenir multiligne, en déplaçant les éléments qui ne tiennent pas sur une nouvelle ligne ou colonne le long de l'axe transversal. Configurez le comportement de retour à la ligne à l'aide de wrap.

Valeur FlexWrap

Exemple utilisant la direction Row

NoWrap (par défaut) : empêche le retour à la ligne des éléments. Les éléments débordent si la taille principale est insuffisante.

Éléments sur une seule ligne qui dépassent du conteneur, car le retour à la ligne est désactivé.

Wrap : lorsqu'il n'y a pas assez d'espace pour un élément (plus un écart), une nouvelle ligne est créée dans la direction de l'axe transversal. Par exemple, si la direction est Row, une nouvelle ligne est ajoutée en dessous.

Les éléments sont renvoyés à la ligne suivante, car le renvoi à la ligne est activé.

WrapReverse : identique à Wrap, sauf que la nouvelle ligne est ajoutée dans la direction opposée à l'axe transversal. Par exemple, si la direction est Row, une nouvelle ligne est ajoutée au-dessus.

Les éléments sont renvoyés à la ligne au-dessus, car le renvoi à la ligne inversé est activé.

L'exemple suivant montre comment fonctionne l'algorithme de wrapping FlexBox. Le conteneur FlexBox a une taille principale de 100dp, avec wrap défini sur FlexWrap.Wrap et un espacement de 8dp. Il contient trois éléments avec basis 20dp, 40dp et 50dp, respectivement.

Il y a 100dp place disponible dans la file d'attente. L'enfant 1 est 20dp. Comme il y a de la place, l'enfant 1 est placé sur la ligne.

Premier élément placé dans le conteneur FlexBox.
Figure 1. Premier élément placé dans le conteneur FlexBox.

Il y a 80dp place disponible dans la file d'attente. L'écart est de 8dp. L'enfant 2 est 40dp. L'espace requis est de 48dp. Comme il y a de la place, l'espace et l'enfant 2 sont placés sur la ligne.

Deuxième élément placé dans le conteneur FlexBox après le premier élément.
Figure 2. Deuxième élément placé dans le conteneur FlexBox après le premier élément.

Il y a 32dp place disponible dans la file d'attente. L'écart est de 8dp. L'enfant 3 est 50dp. L'espace requis est de 58dp. Comme il n'y a pas assez d'espace sur la ligne actuelle, l'enfant 3 est placé sur une nouvelle ligne.

Troisième élément placé sur une nouvelle ligne, car il ne tient pas sur la première ligne.
Figure 3. Le troisième élément est placé sur une nouvelle ligne, car il ne tient pas sur la première.

Ajouter des espaces entre les éléments

Ajoutez des espaces entre les lignes et les colonnes à l'aide de rowGap et columnGap. Cela permet d'éviter d'ajouter des modificateurs d'espacement aux enfants.

L'espacement des lignes ajoute un espace vertical entre les éléments. L'écart entre les colonnes ajoute un espace horizontal entre les éléments. "Gap" ajoute un espace horizontal et vertical entre les éléments.

rowGap

ajoute un espace vertical entre les éléments et les lignes.

columnGap

ajoute un espace horizontal entre les éléments et les lignes.

gap est une fonction pratique qui ajoute à la fois columnGap et rowGap.