LazyRow a Jetpack Compose-ban — mi ez, tulajdonságai és működése

Szerző: IT Sectr Megjelenés: 2026-06-29 Olvasási idő: 10 perc

LazyRow — egy composable függvény a Jetpack Compose-ban vízszintes listák létrehozására elemek lusta betöltésével. A Row-val ellentétben a LazyRow csak a látható elemeket hozza létre, és újra felhasználja azokat vízszintes görgetés közben. A Google Android Documentation, 2025 szerint a LazyRow a LazyColumn vízszintes megfelelője, és hatékonyan használható körhintákhoz, galériákhoz és vízszintes menükhöz mobilalkalmazásokban.

Főbb pontok

  • LazyRow — vízszintes Jetpack Compose lista lusta betöltéssel, amely csak a látható elemeket hozza létre vízszintes görgetéskor.
  • horizontalArrangement kezeli az elemek vízszintes elrendezését, a contentPadding pedig kitöltést ad a tároló széleihez.
  • LazyListState nyomon követi a vízszintes görgetési pozíciót, és programozott vezérlést biztosít az animateScrollToItem segítségével.
  • LazyRow hatékony képkörhintákhoz, kategórialistákhoz, vízszintes galériákhoz és lapokhoz mobil interfészekben.
  • contentType és key optimalizálja a LazyRow elemek újrafelhasználását, csökkentve a újrakomponálást görgetéskor.

Mi az a LazyRow a Jetpack Compose-ban

LazyRow — egy composable függvény, amely egy vízszintesen görgethető listát valósít meg elemek lusta betöltésével. A Row-val ellentétben, amely az összes gyermekelemet egyszerre rendereli, a LazyRow csak a megtekintési területen látható elemeket hozza létre.

A LazyRow ugyanazon az elven működik, mint a LazyColumn, de az elemeket vízszintesen rendezi el. Balra vagy jobbra görgetéskor a látótérből kikerült elemek újra felhasználásra kerülnek az újak megjelenítéséhez. Ez kritikus fontosságú a nagyszámú képet tartalmazó galériák vagy hosszú kategórialisták esetén.

A Android Developers Blog, 2024 szerint a LazyRow ugyanazt a LazyList architektúrát használja, mint a LazyColumn, beleértve a LazyListState-t, a Pool-on keresztüli újrafelhasználási mechanizmust és a különböző elemtípusok támogatását. A maximális hatékonyság az elemek rögzített magasságának használatával érhető el.

A LazyRow alap szignatúrája

LazyRow elfogadja a modifier, state, contentPadding, reverseLayout, horizontalArrangement és verticalAlignment paramétereket. A tartalom DSL items és item függvényeken keresztül definiálható, hasonlóan a LazyColumn-hoz.

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))
            }
        }
    }
}

A LazyRow tulajdonságai: horizontalArrangement és contentPadding

horizontalArrangement kezeli az elemek elosztását a vízszintes tengely mentén a LazyRow-n belül. Ugyanazok az Arrangement értékek érhetők el, mint a Row-ban: Start, Center, End, SpaceBetween, SpaceEvenly, SpaceAround és spacedBy egyéni távolsággal.

contentPadding kitöltést ad a LazyRow tároló széleihez. A Modifier.padding-gal ellentétben a contentPadding figyelembe van véve görgetéskor: az első elem távolságra lesz a bal széltől, az utolsó a jobb széltől. A Material Design Guidelines, 2025 szerint a contentPadding kötelező a körhinták és galériák esetében, hogy az első és utolsó elem ne tapadjon a képernyő széléhez.

verticalAlignment függőlegesen igazítja az elemeket a LazyRow-n belül. Alapértelmezés szerint az Alignment.Top használatos. Különböző magasságú elemek középre igazításához használja a Alignment.CenterVertically-t, ami hasznos a különböző arányú képeket tartalmazó körhintákhoz.

A LazyRow paramétereinek táblázata

ParaméterLeírásAlapértelmezett érték
horizontalArrangementElemek vízszintes elosztásaArrangement.Start
contentPaddingKitöltés a tároló széleinélPaddingValues(0.dp)
verticalAlignmentFüggőleges igazításAlignment.Top
reverseLayoutElemek fordított sorrendjefalse
userScrollEnabledGörgetés engedélyezése a felhasználó általtrue

Vízszintes görgetés vezérlése LazyListState-tel

LazyListState a LazyRow esetében azonos módon működik, mint a LazyColumn esetében: nyomon követi az első látható elemet, az eltolást és az általános görgetési pozíciót. Az állapot a rememberLazyListState() segítségével jön létre, és a state paraméterben kerül átadásra.

A LazyRow programozott görgetésvezérlése ugyanazokkal a metódusokkal történik: animateScrollToItem a sima animációhoz és scrollToItem az azonnali görgetéshez. Mindkettő egy korutin belül hívódik meg. Ez hasznos a "Balra/Jobbra" gombokkal rendelkező körhintákhoz vagy automatikus görgetéshez.

A Android Developers, 2024 szerint a LazyRow támogatja a SnapFlingBehavior-t is — egy olyan viselkedést hirtelen görgetéskor, amely a legközelebbi elemen áll meg, nem az elemek között. Ez egy "tapadó" hatást hoz létre az elemen, ami ismerős a körhintákból és galériákból.

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("Az induláshoz") }
        }
    }
}

Példák a LazyRow használatára interfészekben

Első példa — LazyRow egy képgalériához előnézetekkel. Minden elem egy Box, amely egy képet és egy feliratot tartalmaz. A LazyRow hatékonyan kezel több tíz és száz képet, csak a láthatóakat töltve be.

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)
            )
        }
    }
}

Második példa — LazyRow egy kategórialistához ikonokkal. A kategóriák chip formájában jelennek meg, és a felhasználó vízszintesen görgetheti őket. A LazyRow spacedBy és contentPadding paraméterekkel távolságot hoz létre a kategóriák között és a széleken.

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 kontra Row: mikor mit válasszunk

A LazyRow és a Row közötti választás az elemek számától függ. A Row 5–10 olyan elemhez alkalmas, amelyek mindig láthatók a képernyőn. A LazyRow kötelező, ha sok elem van, vagy az elemek száma dinamikus.

Row az összes elemet egyszerre rendereli, ami nagy elemszám esetén késésekhez vezet. A LazyRow csak a látható elemeket rendereli, ami preferáltá teszi görgethető listákhoz. A Android Developers Blog, 2024 szerint az átmeneti küszöb körülbelül 10 elem: ha több van, használja a LazyRow-t.

LazyRow támogatja az animációkat, a SnapFlingBehavior-t és az elválasztókkal történő csoportosítást is, ami rugalmasabbá teszi összetett interfészekhez. A Row egyszerűbb és nem igényel LazyListState-ot, de nincs optimalizálva hosszú listákhoz.

  • Row — 5–10 statikus elemhez görgetés nélkül
  • LazyRow — 10+ elemhez vízszintes görgetéssel
  • LazyRow — körhintákhoz, galériákhoz, dinamikus listákhoz

Gyakran ismételt kérdések

Miben különbözik a LazyRow a LazyColumn-tól?

LazyRow vízszintesen görget és balról jobbra rendezi el az elemeket, míg a LazyColumn függőlegesen felülről lefelé görget. Mindkettő ugyanazokat a lusta betöltési elveket, LazyListState-t és DSL items függvényeket használja.

Hogyan adható hozzá SnapFlingBehavior a LazyRow-hoz?

Adja át a SnapFlingBehavior(listState) paramétert a LazyRow flingBehavior paraméterének. A SnapFlingBehaviour hatására a LazyRow a legközelebbi elemen áll meg, nem az elemek között, ami tapadó hatást hoz létre a körhintákhoz.

Hogyan készíthető LazyRow végtelen görgetéssel?

Kövesse nyomon az utolsó látható elemet a LazyListState.layoutInfo segítségével, és töltsön be új adatokat, amikor az utolsó elem a lista végéhez közelít. Ciklikus görgetéshez használjon egyéni megvalósítást az elemek duplikálásával.

Használható a LazyRow a LazyColumn-on belül?

Igen, a LazyRow beágyazható a LazyColumn-ba. Ez egy szabványos minta összetett oldalak létrehozásához vízszintes körhintákkal egy függőleges listán belül. Minden LazyRow-nak rögzített magassággal kell rendelkeznie a helyes működéshez.

Hogyan határozható meg, hogy a LazyRow a végéig görgetett?

Használja a LazyListState.layoutInfo.visibleItemsInfo tulajdonságot, és hasonlítsa össze az utolsó látható elem indexét a teljes szám mínusz eggyel. Amikor ezek az értékek megegyeznek, a LazyRow a lista végén van.

Összefoglalás

  • LazyRow — lusta betöltésű vízszintes lista, amely csak a látható elemeket hozza létre, és görgetéskor újra felhasználja azokat a nagy adatokkal való hatékony munkához.
  • horizontalArrangement kezeli az elemek vízszintes elosztását, a contentPadding pedig kitöltést ad a szélekhez a Material Design helyes megjelenítéséhez.
  • LazyListState programozott görgetésvezérlést biztosít az animateScrollToItem segítségével, és támogatja a SnapFlingBehavior-t az elemekhez tapadáshoz.
  • LazyRow hatékony képkörhintákhoz, galériákhoz, kategórialistákhoz, lapokhoz és vízszintes menükhöz mobil interfészekben.
  • contentType és key — a fő optimalizálási eszközök, amelyek csökkentik az újrakomponálást és javítják a LazyRow elemek újrafelhasználását.
  • Row 5–10 statikus elemhez alkalmas, LazyRow — dinamikus vagy hosszú vízszintes listákhoz görgetéssel.
  • LazyRow beágyazható a LazyColumn-ba összetett elrendezések létrehozásához vízszintes körhintákkal egy függőleges listán belül.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is