LazyRow dans Jetpack Compose — ce que c'est, propriétés et fonctionnement

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

LazyRow — est une fonction compostable dans Jetpack Compose pour créer des listes horizontales avec chargement différé des éléments. Contrairement à Row, LazyRow crée uniquement les éléments visibles et les réutilise lors du défilement horizontal. Selon Google Android Documentation, 2025, LazyRow est l'équivalent horizontal de LazyColumn et est efficace pour les carrousels, galeries et menus horizontaux dans les applications mobiles.

Points clés

  • LazyRow — liste horizontale Jetpack Compose avec chargement différé, créant uniquement les éléments visibles lors du défilement horizontal.
  • horizontalArrangement gère la disposition horizontale des éléments, tandis que contentPadding ajoute du remplissage sur les bords du conteneur.
  • LazyListState suit la position de défilement horizontal et fournit un contrôle programmatique via animateScrollToItem.
  • LazyRow est efficace pour les carrousels d'images, les listes de catégories, les galeries horizontales et les onglets dans les interfaces mobiles.
  • contentType et key optimisent la réutilisation des éléments dans LazyRow, réduisant la recomposition lors du défilement.

Qu'est-ce que LazyRow dans Jetpack Compose

LazyRow — est une fonction compostable implémentant une liste horizontale défilable avec chargement différé des éléments. Contrairement à Row qui rend tous les éléments enfants simultanément, LazyRow crée uniquement les éléments visibles dans la zone d'affichage.

LazyRow fonctionne sur le même principe que LazyColumn, mais dispose les éléments horizontalement. En défilant vers la gauche ou la droite, les éléments qui sortent de la zone d'affichage sont réutilisés pour afficher de nouveaux éléments. Ceci est crucial pour les galeries avec de nombreuses images ou les longues listes de catégories.

Selon Android Developers Blog, 2024, LazyRow utilise la même architecture LazyList que LazyColumn, incluant LazyListState, le mécanisme de réutilisation via Pool et la prise en charge de différents types d'éléments. L'efficacité maximale est atteinte avec une hauteur fixe des éléments.

Signature de base de LazyRow

LazyRow accepte les paramètres modifier, state, contentPadding, reverseLayout, horizontalArrangement et verticalAlignment. Le contenu est défini via les fonctions DSL items et item, similaire à LazyColumn.

kotlin
@Composable
fun SimpleLazyRow() {
    val items = (1..50).toList()
    LazyRow(
        modifier = Modifier.fillMaxWidth().height(100.dp),
        horizontalArrangement = Arrangement.spacedBy(8.dp),
        contentPadding = PaddingValues(start = 16.dp, end = 16.dp)
    ) {
        items(items) { item ->
            Box(
                modifier = Modifier.size(80.dp).background(Color.Gray)
            ) {
                Text(text = "$item", modifier = Modifier.align(Alignment.Center))
            }
        }
    }
}

Propriétés de LazyRow: horizontalArrangement et contentPadding

horizontalArrangement gère la distribution des éléments le long de l'axe horizontal dans LazyRow. Les mêmes valeurs Arrangement que dans Row sont disponibles: Start, Center, End, SpaceBetween, SpaceEvenly, SpaceAround et spacedBy avec espacement personnalisé.

contentPadding ajoute du remplissage sur les bords du conteneur LazyRow. Contrairement à Modifier.padding, contentPadding est pris en compte lors du défilement: le premier élément aura un remplissage depuis le bord gauche, le dernier depuis le bord droit. Selon Material Design Guidelines, 2025, contentPadding est obligatoire pour les carrousels et galeries afin que le premier et le dernier élément ne collent pas au bord de l'écran.

verticalAlignment aligne les éléments verticalement dans LazyRow. Par défaut, Alignment.Top est utilisé. Pour centrer des éléments de différentes hauteurs, utilisez Alignment.CenterVertically, ce qui est utile pour les carrousels avec des images de différents ratios.

Tableau des paramètres de LazyRow

ParamètreDescriptionValeur par défaut
horizontalArrangementDistribution horizontale des élémentsArrangement.Start
contentPaddingRemplissage sur les bords du conteneurPaddingValues(0.dp)
verticalAlignmentAlignement verticalAlignment.Top
reverseLayoutOrdre inversé des élémentsfalse
userScrollEnabledActiver le défilement utilisateurtrue

Gestion du défilement horizontal avec LazyListState

LazyListState pour LazyRow fonctionne identiquement à LazyColumn: il suit le premier élément visible, le décalage et la position générale de défilement. L'état est créé via rememberLazyListState() et passé au paramètre state.

Le contrôle programmatique du défilement de LazyRow se fait avec les mêmes méthodes: animateScrollToItem pour une animation fluide et scrollToItem pour un défilement instantané. Les deux sont appelés dans une coroutine. Ceci est utile pour les carrousels avec des boutons de navigation ou pour le défilement automatique.

Selon Android Developers, 2024, LazyRow prend également en charge SnapFlingBehavior — un comportement de défilement rapide qui s'arrête sur l'élément le plus proche plutôt qu'entre les éléments. Cela crée un effet d'accrochage familier pour les carrousels et galeries.

kotlin
@Composable
fun CarouselWithSnap() {
    val listState = rememberLazyListState()
    val scope = rememberCoroutineScope()
    val items = listOf("A", "B", "C", "D", "E")

    Column {
        LazyRow(
            state = listState,
            flingBehavior = SnapFlingBehavior(listState),
            horizontalArrangement = Arrangement.spacedBy(8.dp)
        ) {
            items(items) { item ->
                Card(modifier = Modifier.width(150.dp)) {
                    Text(text = item, modifier = Modifier.padding(16.dp))
                }
            }
        }

        Row(modifier = Modifier.fillMaxWidth()) {
            Button(onClick = {
                scope.launch {
                    listState.animateScrollToItem(0)
                }
            }) { Text("Pour commencer") }
        }
    }
}

Exemples d'utilisation de LazyRow dans les interfaces

Le premier exemple — LazyRow pour une galerie d'images avec aperçus. Chaque élément est une Box avec une image et une légende. LazyRow gère efficacement des dizaines et des centaines d'images, ne chargeant que les visibles.

kotlin
@Composable
fun ImageGallery(images: List<String>) {
    LazyRow(
        contentPadding = PaddingValues(start = 16.dp, end = 16.dp),
        horizontalArrangement = Arrangement.spacedBy(12.dp)
    ) {
        items(images, key = { it }) { url ->
            AsyncImage(
                model = url,
                contentDescription = "Image",
                modifier = Modifier.size(120.dp)
            )
        }
    }
}

Le deuxième exemple — LazyRow pour une liste de catégories avec icônes. Les catégories sont affichées sous forme de chips et l'utilisateur peut les faire défiler horizontalement. LazyRow avec spacedBy et contentPadding crée un espacement entre les catégories et sur les bords.

kotlin
@Composable
fun CategoryChips(categories: List<String>) {
    LazyRow(
        contentPadding = PaddingValues(horizontal = 16.dp),
        horizontalArrangement = Arrangement.spacedBy(8.dp)
    ) {
        items(categories, key = { it }) { category ->
            AssistChip(
                onClick = {},
                label = { Text(category) }
            )
        }
    }
}

LazyRow vs Row: quand choisir lequel

Le choix entre LazyRow et Row dépend du nombre d'éléments. Row convient pour 5–10 éléments toujours visibles à l'écran. LazyRow est essentiel lorsqu'il y a beaucoup d'éléments ou que leur nombre est dynamique.

Row rend tous les éléments à la fois, ce qui cause des ralentissements avec un grand nombre d'éléments. LazyRow ne rend que les visibles, ce qui le rend préférable pour les listes défilables. Selon Android Developers Blog, 2024, le seuil est d'environ 10 éléments: s'il y a plus d'éléments, utilisez LazyRow.

LazyRow prend également en charge les animations, SnapFlingBehavior et le regroupement via des séparateurs, ce qui le rend plus flexible pour les interfaces complexes. Row est plus simple et ne nécessite pas LazyListState, mais n'est pas optimisé pour les longues listes.

  • Row — pour 5–10 éléments statiques sans défilement
  • LazyRow — pour 10+ éléments avec défilement horizontal
  • LazyRow — pour carrousels, galeries, listes dynamiques

Questions fréquentes

En quoi LazyRow diffère-t-il de LazyColumn?

LazyRow défile horizontalement et dispose les éléments de gauche à droite, tandis que LazyColumn défile verticalement de haut en bas. Les deux utilisent les mêmes principes de chargement différé, LazyListState et fonctions DSL items.

Comment ajouter SnapFlingBehavior à LazyRow?

Passez SnapFlingBehavior(listState) au paramètre flingBehavior de LazyRow. SnapFlingBehavior force LazyRow à s'arrêter sur l'élément le plus proche plutôt qu'entre les éléments, créant un effet d'accrochage pour les carrousels.

Comment faire un LazyRow avec défilement infini?

Suivez le dernier élément visible via LazyListState.layoutInfo et chargez de nouvelles données lorsque le dernier élément approche de la fin de la liste. Pour le défilement circulaire, utilisez une implémentation personnalisée avec duplication d'éléments.

Peut-on utiliser LazyRow à l'intérieur de LazyColumn?

Oui, LazyRow peut être imbriqué dans LazyColumn. C'est un modèle standard pour créer des pages complexes avec des carrousels horizontaux dans une liste verticale. Chaque LazyRow doit avoir une hauteur fixe pour un fonctionnement correct.

Comment détecter que LazyRow a défilé jusqu'au bout?

Utilisez LazyListState.layoutInfo.visibleItemsInfo et comparez l'indice du dernier élément visible avec le total moins un. Lorsque ces valeurs coïncident, LazyRow est à la fin de la liste.

Résumé

  • LazyRow — liste horizontale avec chargement différé, créant et réutilisant uniquement les éléments visibles lors du défilement pour traiter efficacement de grands volumes de données.
  • horizontalArrangement gère la distribution horizontale des éléments, tandis que contentPadding ajoute du remplissage sur les bords pour un affichage correct selon Material Design.
  • LazyListState fournit un contrôle programmatique du défilement via animateScrollToItem et prend en charge SnapFlingBehavior pour l'accrochage aux éléments.
  • LazyRow est efficace pour les carrousels d'images, galeries, listes de catégories, onglets et menus horizontaux dans les interfaces mobiles.
  • contentType et key sont les principaux outils d'optimisation qui réduisent la recomposition et améliorent la réutilisation des éléments dans LazyRow.
  • Row convient pour 5–10 éléments statiques, LazyRow — pour les listes horizontales dynamiques ou longues avec défilement.
  • LazyRow peut être imbriqué dans LazyColumn pour créer des mises en page complexes avec des carrousels horizontaux dans une liste verticale.

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