LazyRow i Jetpack Compose — vad är det, egenskaper och hur det fungerar

Författare: IT Sectr Publicerad: 2026-06-29 Lästid: 10 min

LazyRow — är en composable-funktion i Jetpack Compose för att skapa horisontella listor med lat laddning av element. Till skillnad från Row skapar LazyRow bara synliga element och återanvänder dem vid horisontell scrollning. Enligt Google Android Documentation, 2025 är LazyRow den horisontella motsvarigheten till LazyColumn och är effektiv för karuseller, gallerier och horisontella menyer i mobilappar.

Huvudpunkter

  • LazyRow — horisontell Jetpack Compose-lista med lat laddning, som bara skapar synliga element vid horisontell scrollning.
  • horizontalArrangement hanterar placeringen av element horisontellt, och contentPadding lägger till utfyllnad vid kanterna av behållaren.
  • LazyListState spårar den horisontella scrollpositionen och ger programmatisk kontroll via animateScrollToItem.
  • LazyRow är effektiv för bildkaruseller, kategorilistor, horisontella gallerier och flikar i mobila gränssnitt.
  • contentType och key optimerar återanvändning av LazyRow-element, minskar recomposition vid scrollning.

Vad är LazyRow i Jetpack Compose

LazyRow — är en composable-funktion som implementerar en horisontellt scrollbar lista med lat laddning av element. Till skillnad från Row, som renderar alla underordnade element samtidigt, skapar LazyRow bara element som är synliga i visningsområdet.

LazyRow fungerar enligt samma princip som LazyColumn, men placerar element horisontellt. Vid scrollning åt vänster eller höger återanvänds element som har lämnat visningsområdet för att visa nya. Detta är kritiskt för gallerier med många bilder eller långa kategorilistor.

Enligt Android Developers Blog, 2024 använder LazyRow samma LazyList-arkitektur som LazyColumn, inklusive LazyListState, återanvändningsmekanism via Pool och stöd för olika elementtyper. Maximal effektivitet uppnås med fast höjd på elementen.

Grundläggande signatur för LazyRow

LazyRow accepterar parametrarna modifier, state, contentPadding, reverseLayout, horizontalArrangement och verticalAlignment. Innehållet definieras via DSL-funktionerna items och item, liknande 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))
            }
        }
    }
}

LazyRows egenskaper: horizontalArrangement och contentPadding

horizontalArrangement hanterar fördelningen av element längs den horisontella axeln inuti LazyRow. Samma Arrangement-värden som i Row är tillgängliga: Start, Center, End, SpaceBetween, SpaceEvenly, SpaceAround och spacedBy med anpassat mellanrum.

contentPadding lägger till utfyllnad vid kanterna av LazyRow-behållaren. Till skillnad från Modifier.padding tas contentPadding med i beräkningen vid scrollning: det första elementet har marginal från vänsterkanten, det sista — från högerkanten. Enligt Material Design Guidelines, 2025 är contentPadding obligatoriskt för karuseller och gallerier så att första och sista elementet inte fastnar vid skärmkanten.

verticalAlignment justerar element vertikalt inuti LazyRow. Som standard används Alignment.Top. För centrering av element med olika höjd, använd Alignment.CenterVertically, vilket är användbart för karuseller med bilder av olika proportioner.

Tabell över LazyRow-parametrar

ParameterBeskrivningStandardvärde
horizontalArrangementHorisontell fördelning av elementArrangement.Start
contentPaddingUtfyllnad vid behållarens kanterPaddingValues(0.dp)
verticalAlignmentVertikal justeringAlignment.Top
reverseLayoutOmvänd ordning på elementfalse
userScrollEnabledTillåt scrollning av användarentrue

Hantera horisontell scrollning med LazyListState

LazyListState för LazyRow fungerar identiskt som för LazyColumn: det spårar första synliga elementet, förskjutningen och den allmänna scrollpositionen. Tillståndet skapas via rememberLazyListState() och skickas i parametern state.

Programmatisk kontroll av LazyRow-scrollning görs med samma metoder: animateScrollToItem för mjuk animation och scrollToItem för omedelbar scrollning. Båda anropas inuti en korutin. Detta är användbart för karuseller med knappar "Vänster/Höger" eller för automatisk scrollning.

Enligt Android Developers, 2024 stöder LazyRow också SnapFlingBehavior — beteende vid snabb scrollning som stannar på det närmaste elementet, inte mellan element. Detta skapar en "vidhäftningseffekt" till elementet, bekant från karuseller och gallerier.

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("För att starta") }
        }
    }
}

Exempel på användning av LazyRow i gränssnitt

Första exemplet — LazyRow för ett bildgalleri med förhandsvisningar. Varje element är en Box med bild och bildtext. LazyRow hanterar effektivt tiotals och hundratals bilder genom att bara ladda de synliga.

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

Andra exemplet — LazyRow för en kategorilista med ikoner. Kategorier visas som chips och användaren kan scrolla dem horisontellt. LazyRow med spacedBy och contentPadding skapar mellanrum mellan kategorier och vid kanterna.

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 jämfört med Row: när man ska välja vad

Valet mellan LazyRow och Row beror på antalet element. Row passar för 5–10 element som alltid är synliga på skärmen. LazyRow är obligatoriskt när elementen är många eller deras antal är dynamiskt.

Row renderar alla element samtidigt, vilket leder till fördröjningar vid ett stort antal element. LazyRow renderar bara synliga element, vilket gör det att föredra för listor med scrollning. Enligt Android Developers Blog, 2024 är övergångströskeln cirka 10 element: om det finns fler, använd LazyRow.

LazyRow stöder också animationer, SnapFlingBehavior och gruppering via separatorer, vilket gör det mer flexibelt för komplexa gränssnitt. Row är enklare och kräver inte LazyListState, men är inte optimerat för långa listor.

  • Row — för 5–10 statiska element utan scrollning
  • LazyRow — för 10+ element med horisontell scrollning
  • LazyRow — för karuseller, gallerier, dynamiska listor

Vanliga frågor

Vad skiljer LazyRow från LazyColumn?

LazyRow scrollar horisontellt och placerar element från vänster till höger, medan LazyColumn scrollar vertikalt uppifrån och ner. Båda använder samma principer för lat laddning, LazyListState och DSL-funktioner items.

Hur lägger man till SnapFlingBehavior i LazyRow?

Skicka SnapFlingBehavior(listState) till parametern flingBehavior i LazyRow. SnapFlingBehaviour får LazyRow att stanna på det närmaste elementet, inte mellan element, vilket skapar en vidhäftningseffekt för karuseller.

Hur gör man LazyRow med oändlig scrollning?

Spåra det sista synliga elementet via LazyListState.layoutInfo och ladda ny data när det sista elementet närmar sig slutet av listan. För cyklisk scrollning, använd en anpassad implementering med duplicering av element.

Kan man använda LazyRow inuti LazyColumn?

Ja, LazyRow kan kapslas inuti LazyColumn. Detta är ett standardmönster för att skapa komplexa sidor med horisontella karuseller i en vertikal lista. Varje LazyRow bör ha fast höjd för korrekt funktion.

Hur avgör man att LazyRow har scrollats till slutet?

Använd LazyListState.layoutInfo.visibleItemsInfo och jämför indexet för det sista synliga elementet med det totala antalet minus ett. När dessa värden matchar är LazyRow i slutet av listan.

Sammanfattning

  • LazyRow — horisontell lista med lat laddning, som skapar bara synliga element och återanvänder dem vid scrollning för effektiv hantering av stora datamängder.
  • horizontalArrangement hanterar horisontell fördelning av element, och contentPadding lägger till utfyllnad vid kanterna för korrekt visning i Material Design.
  • LazyListState ger programmatisk scrollkontroll via animateScrollToItem och stöder SnapFlingBehavior för vidhäftning till element.
  • LazyRow är effektivt för bildkaruseller, gallerier, kategorilistor, flikar och horisontella menyer i mobila gränssnitt.
  • contentType och key — de främsta optimeringsverktygen som minskar recomposition och förbättrar återanvändning av LazyRow-element.
  • Row passar för 5–10 statiska element, LazyRow — för dynamiska eller långa horisontella listor med scrollning.
  • LazyRow kan kapslas i LazyColumn för att skapa komplexa layouter med horisontella karuseller i en vertikal lista.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också