Row dans Jetpack Compose : ce que c'est, propriétés composable et fonctionnement

Auteur : IT Sectr Publié le : 2026-06-28 Temps de lecture : 10 min

Row est une fonction composable dans Jetpack Compose permettant de placer des éléments enfants dans une rangée horizontale. Contrairement à Column, Row dispose les éléments de gauche à droite et prend en charge la configuration de la mise en page via les paramètres horizontalArrangement et verticalAlignment. Selon Google Android Documentation, 2025, Row est l'un des trois conteneurs de base de Compose avec Column et Box et est utilisé pour créer des structures d'interface horizontales : rangées de boutons, champs de saisie et icônes avec texte.

Points clés

  • Row est un conteneur horizontal Jetpack Compose qui place les éléments composables enfants sur une seule ligne de gauche à droite.
  • horizontalArrangement contrôle la distribution horizontale des éléments : uniformément, avec espacement ou à la fin du conteneur.
  • verticalAlignment aligne les éléments verticalement par rapport au conteneur : haut, centre ou bas.
  • Modifier.weight permet de distribuer l'espace disponible entre les éléments de Row proportionnellement au poids spécifié.
  • Row est efficace pour créer des rangées de boutons, des listes d'icônes, des champs de saisie et des barres d'outils horizontales dans les interfaces mobiles.

Qu'est-ce que Row dans Jetpack Compose

Row est une fonction composable qui place les éléments enfants dans une séquence horizontale. Dans la hiérarchie des mises en page Compose, Row occupe la position d'un conteneur de base aux côtés de Column et Box.

Row ne nécessite pas de spécifier de dimensions — il s'ajuste automatiquement à son contenu. La largeur de Row est égale à la somme des largeurs des éléments enfants incluant le remplissage, sauf si Modifier.fillMaxWidth ou une taille fixe est spécifié.

Les éléments enfants de Row peuvent avoir leurs propres modificateurs qui affectent leur position dans le conteneur. Par exemple, Modifier.weight permet aux éléments d'occuper une partie proportionnelle de l'espace disponible.

Selon Android Developers Blog, 2024, Row traite les éléments enfants séquentiellement, calculant leurs tailles selon les règles de mesure Compose : d'abord les éléments sans weight sont mesurés, puis l'espace restant est distribué entre les éléments avec weight.

Syntaxe et signature de base de Row

La signature de base de Row inclut le paramètre modifier, horizontalArrangement et verticalAlignment. Tous les éléments enfants sont passés dans le bloc lambda de contenu final.

kotlin
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly,
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(text = "Un")
        Text(text = "Deux")
        Text(text = "Trois")
    }
}

Propriétés de Row : horizontalArrangement et verticalAlignment

Le paramètre horizontalArrangement détermine comment les éléments enfants sont répartis le long de l'axe horizontal dans Row. Les valeurs disponibles incluent Start, End, Center, SpaceBetween, SpaceAround et SpaceEvenly de la classe Arrangement.

Arrangement.Start place les éléments au début du conteneur, Arrangement.End — à la fin, et Arrangement.Center — au centre. Ces valeurs fonctionnent de manière similaire à la propriété justify-content en CSS Flexbox.

Arrangement.SpaceBetween distribue les éléments uniformément, plaçant le premier élément au début, le dernier à la fin et les autres avec des espaces égaux entre eux. Selon Material Design Guidelines, 2025, SpaceBetween est optimal pour les barres d'outils et les rangées de navigation.

Le paramètre verticalAlignment aligne les éléments verticalement. Les valeurs disponibles incluent Alignment.Top, Alignment.CenterVertically et Alignment.Bottom. Cette propriété est utile lorsque les éléments de Row ont des hauteurs différentes — par exemple, une icône à côté d'un texte multiligne.

Tableau des valeurs Arrangement

ValeurDescriptionUtilisation
StartLes éléments sont poussés au début de RowRangées alignées à gauche
CenterLes éléments sont centrés dans le conteneurMenus horizontaux, en-têtes
SpaceBetweenUniformément avec premier au début et dernier à la finBarres d'outils, navigation
SpaceEvenlyEspacement égal entre les éléments et sur les bordsRangées de boutons, grilles uniformes
SpaceAroundEspacement égal entre les éléments, demi-espacement sur les bordsCarrousels, galeries d'icônes

Distribution de l'espace avec Modifier.weight

Modifier.weight est un modificateur disponible uniquement dans Row et Column qui distribue l'espace disponible entre les éléments enfants proportionnellement à la valeur spécifiée. Si un élément a un poids de 1.0f et un autre de 2.0f, le deuxième élément occupera deux fois plus d'espace.

Les éléments sans weight occupent l'espace nécessaire à leur contenu. L'espace restant est distribué entre les éléments avec weight proportionnellement à leur poids. Ce comportement est similaire à la propriété flex-grow en CSS Flexbox.

Selon Android Developer Documentation, 2025, weight fonctionne uniquement dans Row, Column et BoxWithConstraints. Lors de l'utilisation de weight dans Row, tous les éléments enfants sont mesurés en deux passes : d'abord les éléments sans weight, puis les éléments avec weight.

kotlin
@Composable
fun WeightExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.Start
    ) {
        Text(
            text = "Gauche",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "Droite")
    }
}

Exemples de code avec Row

Le premier exemple montre Row avec une icône et du texte — un scénario typique pour une liste de contacts ou des paramètres. Icon et Text sont encapsulés dans Row avec verticalAlignment centré.

kotlin
@Composable
fun IconWithText() {
    Row(
        verticalAlignment = Alignment.CenterVertically,
        modifier = Modifier.padding(8.dp)
    ) {
        Icon(
            imageVector = Icons.Default.Favorite,
            contentDescription = "Favorite"
        )
        Spacer(modifier = Modifier.width(8.dp))
        Text(text = "Ajouter aux favoris")
    }
}

Le deuxième exemple montre Row avec des boutons et une distribution uniforme. SpaceEvenly garantit un espacement égal entre tous les boutons et les bords du conteneur.

kotlin
@Composable
fun ButtonRow() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Button(onClick = {}) { Text("Annuler") }
        Button(onClick = {}) { Text("Enregistrer") }
    }
}

Le troisième exemple — Row dans une Card pour afficher une évaluation. Un Row imbriqué avec Modifier.weight permet à l'étoile d'évaluation et à la valeur numérique d'occuper un espace fixe.

kotlin
@Composable
fun RatingRow(rating: Float) {
    Row(
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(
            text = "Évaluation :",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "$rating / 5.0")
    }
}

Caractéristiques de Row en mise en page adaptative

Row nécessite un contrôle de la largeur en mise en page adaptative. Si le contenu de Row dépasse la largeur d'écran disponible, les éléments peuvent déborder des limites du conteneur. Pour éviter cela, utilisez Modifier.horizontalScroll ou passez à Column.

Lors de la combinaison de Row avec Modifier.weight, il est important de définir fillMaxWidth sur le Row parent — sinon weight distribuera un espace inexistant. Selon Material Design Guidelines, 2025, Row avec weight sans fillMaxWidth est considéré comme une configuration invalide.

Pour les interfaces adaptatives, il est recommandé de combiner Row avec Box ou d'utiliser Arrangement.SpaceBetween pour la distribution automatique des éléments sur différentes tailles d'écran. Cela offre une flexibilité sans requêtes média.

  • Modifier.horizontalScroll — ajoute le défilement lorsque Row déborde
  • Modifier.weight — distribue l'espace proportionnellement
  • Arrangement.SpaceBetween — distribution adaptative avec fixation aux bords

Questions fréquentes

En quoi Row diffère-t-il de Column dans Jetpack Compose ?

Row place les éléments horizontalement (de gauche à droite), tandis que Column les place verticalement (de haut en bas). Row remplace LinearLayout avec orientation horizontale de l'ancienne approche View, et Column remplace LinearLayout vertical.

Comment rendre Row défilable ?

Ajoutez le modificateur Modifier.horizontalScroll à Row. Pour les grandes listes avec chargement différé, utilisez LazyRow — il rend uniquement les éléments visibles et les recycle lors du défilement.

Peut-on imbriquer Row dans un autre Row ?

Oui, Row peut être imbriqué dans un autre Row, Column ou Box. Lors de l'imbrication, gardez à l'esprit que le Row interne recevra sa largeur du conteneur parent, et si nécessaire, définissez fillMaxWidth pour chaque niveau.

Que fait Modifier.weight dans Row ?

Modifier.weight distribue l'espace restant dans Row entre les éléments enfants proportionnellement au poids spécifié. Un élément avec un poids de 2.0f sera deux fois plus large qu'un élément avec un poids de 1.0f. Weight fonctionne uniquement dans Row et Column.

Comment centrer verticalement les éléments de Row ?

Utilisez le paramètre verticalAlignment = Alignment.CenterVertically lors de la création de Row. Cela alignera tous les éléments enfants le long de l'axe vertical indépendamment de leur hauteur.

Résumé

  • Row est un conteneur horizontal Compose pour placer des éléments dans une rangée de gauche à droite avec disposition et alignement personnalisables.
  • horizontalArrangement contrôle la distribution horizontale des éléments : Start, Center, End, SpaceBetween, SpaceEvenly et SpaceAround.
  • verticalAlignment aligne les éléments verticalement via Alignment.Top, CenterVertically ou Bottom.
  • Modifier.weight distribue l'espace libre entre les éléments proportionnellement au poids spécifié, similaire à flex-grow en CSS.
  • Row prend en charge l'imbrication, le défilement via Modifier.horizontalScroll et fonctionne avec d'autres conteneurs Compose.
  • En mise en page adaptative, il est important de définir Modifier.fillMaxWidth pour Row avec weight, sinon les éléments ne distribueront pas correctement l'espace.
  • Pour les listes horizontales avec de nombreux éléments, utilisez LazyRow au lieu de Row pour des performances optimales.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi