LazyRow sa Jetpack Compose — ano ito, mga katangian at paano ito gumagana

May-akda: IT Sectr Nai-publish: 2026-06-29 Oras ng pagbabasa: 10 min

LazyRow — ay isang composable function sa Jetpack Compose para sa paggawa ng mga pahalang na listahan na may lazy loading ng mga elemento. Hindi tulad ng Row, ang LazyRow ay gumagawa lamang ng mga nakikitang elemento at muling ginagamit ang mga ito sa pahalang na pag-scroll. Ayon sa Google Android Documentation, 2025, ang LazyRow ay ang pahalang na katumbas ng LazyColumn at epektibo para sa mga carousel, gallery at pahalang na menu sa mga mobile app.

Mga pangunahing punto

  • LazyRow — pahalang na listahan ng Jetpack Compose na may lazy loading, na gumagawa lamang ng mga nakikitang elemento sa pahalang na pag-scroll.
  • horizontalArrangement namamahala sa pag-aayos ng mga elemento nang pahalang, at ang contentPadding ay nagdaragdag ng padding sa mga gilid ng container.
  • LazyListState sumusubaybay sa posisyon ng pahalang na pag-scroll at nagbibigay ng programmatic na kontrol sa pamamagitan ng animateScrollToItem.
  • LazyRow ay epektibo para sa mga carousel ng larawan, listahan ng kategorya, pahalang na gallery at tab sa mga mobile interface.
  • contentType at key nag-o-optimize ng muling paggamit ng mga elemento ng LazyRow, binabawasan ang recomposition sa pag-scroll.

Ano ang LazyRow sa Jetpack Compose

LazyRow — ay isang composable function na nagpapatupad ng pahalang na nai-scroll na listahan na may lazy loading ng mga elemento. Hindi tulad ng Row na ni-re-render ang lahat ng child element nang sabay-sabay, ang LazyRow ay gumagawa lamang ng mga elementong nakikita sa viewing area.

Ang LazyRow ay gumagana sa parehong prinsipyo ng LazyColumn, ngunit inaayos ang mga elemento nang pahalang. Sa pag-scroll pakaliwa o pakanan, ang mga elementong lumabas sa viewing area ay muling ginagamit para magpakita ng mga bago. Ito ay kritikal para sa mga gallery na may maraming larawan o mahabang listahan ng kategorya.

Ayon sa Android Developers Blog, 2024, ang LazyRow ay gumagamit ng parehong LazyList architecture gaya ng LazyColumn, kabilang ang LazyListState, mekanismo ng muling paggamit sa pamamagitan ng Pool at suporta para sa iba't ibang uri ng elemento. Ang maximum na kahusayan ay nakakamit gamit ang fixed na taas ng elemento.

Batayang signature ng LazyRow

LazyRow ay tumatanggap ng mga parameter na modifier, state, contentPadding, reverseLayout, horizontalArrangement at verticalAlignment. Ang nilalaman ay tinutukoy sa pamamagitan ng DSL functions na items at item, katulad ng 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))
            }
        }
    }
}

Mga katangian ng LazyRow: horizontalArrangement at contentPadding

horizontalArrangement namamahala sa distribusyon ng mga elemento sa kahabaan ng pahalang na axis sa loob ng LazyRow. Ang parehong mga halaga ng Arrangement tulad ng sa Row ay available: Start, Center, End, SpaceBetween, SpaceEvenly, SpaceAround at spacedBy na may custom na spacing.

contentPadding nagdaragdag ng padding sa mga gilid ng LazyRow container. Hindi tulad ng Modifier.padding, ang contentPadding ay isinasaalang-alang sa pag-scroll: ang unang elemento ay may puwang mula sa kaliwang gilid, ang huli — mula sa kanang gilid. Ayon sa Material Design Guidelines, 2025, ang contentPadding ay kinakailangan para sa mga carousel at gallery upang ang una at huling elemento ay hindi dumikit sa gilid ng screen.

verticalAlignment nag-a-align ng mga elemento nang patayo sa loob ng LazyRow. Bilang default, Alignment.Top ang ginagamit. Para sa pag-centre ng mga elementong may iba't ibang taas, gamitin ang Alignment.CenterVertically, na kapaki-pakinabang para sa mga carousel na may mga larawang may iba't ibang ratio.

Talahanayan ng mga parameter ng LazyRow

ParameterPaglalarawanDefault na halaga
horizontalArrangementDistribusyon ng mga elemento nang pahalangArrangement.Start
contentPaddingPadding sa mga gilid ng containerPaddingValues(0.dp)
verticalAlignmentVertical alignmentAlignment.Top
reverseLayoutBaliktad na pagkakasunod-sunod ng mga elementofalse
userScrollEnabledPayagan ang pag-scroll ng usertrue

Pagkontrol ng pahalang na pag-scroll gamit ang LazyListState

LazyListState para sa LazyRow ay gumagana nang katulad ng LazyColumn: sinusubaybayan nito ang unang nakikitang elemento, offset at pangkalahatang posisyon ng pag-scroll. Ang estado ay nilikha sa pamamagitan ng rememberLazyListState() at ipinapasa sa parameter na state.

Ang programmatic na kontrol ng pag-scroll ng LazyRow ay ginagawa gamit ang parehong mga pamamaraan: animateScrollToItem para sa smooth animation at scrollToItem para sa instant scrolling. Pareho ay tinatawag sa loob ng isang coroutine. Ito ay kapaki-pakinabang para sa mga carousel na may mga button na "Kaliwa/Kanan" o para sa automatic scrolling.

Ayon sa Android Developers, 2024, ang LazyRow ay sumusuporta rin sa SnapFlingBehavior — pag-uugali sa mabilis na pag-scroll na humihinto sa pinakamalapit na elemento, hindi sa pagitan ng mga elemento. Ito ay lumilikha ng epektong "dumikit" sa elemento, pamilyar sa mga carousel at gallery.

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("Upang magsimula") }
        }
    }
}

Mga halimbawa ng paggamit ng LazyRow sa mga interface

Unang halimbawa — LazyRow para sa gallery ng larawan na may mga preview. Bawat elemento ay Box na may larawan at caption. Ang LazyRow ay mahusay na humahawak ng sampu-sampung daan-daang larawan, nilo-load lamang ang mga nakikita.

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

Ikalawang halimbawa — LazyRow para sa listahan ng kategorya na may mga icon. Ang mga kategorya ay ipinapakita bilang mga chip, at ang user ay maaaring mag-scroll sa mga ito nang pahalang. Ang LazyRow na may spacedBy at contentPadding ay lumilikha ng espasyo sa pagitan ng mga kategorya at sa mga gilid.

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 laban sa Row: kailan pipiliin ang alin

Ang pagpili sa pagitan ng LazyRow at Row ay depende sa bilang ng mga elemento. Ang Row ay angkop para sa 5–10 elemento na palaging nakikita sa screen. Ang LazyRow ay kinakailangan kapag maraming elemento o ang bilang nito ay dynamic.

Row ni-re-render ang lahat ng elemento nang sabay-sabay, na nagdudulot ng pagkaantala sa maraming elemento. Ang LazyRow ay nagre-render lamang ng mga nakikitang elemento, ginagawa itong mas gusto para sa mga listahang may pag-scroll. Ayon sa Android Developers Blog, 2024, ang threshold ng paglipat ay humigit-kumulang 10 elemento: kung mas marami, gamitin ang LazyRow.

LazyRow ay sumusuporta rin sa mga animation, SnapFlingBehavior at pagpapangkat sa pamamagitan ng mga separator, ginagawa itong mas flexible para sa mga kumplikadong interface. Ang Row ay mas simple at hindi nangangailangan ng LazyListState, ngunit hindi optimized para sa mahabang listahan.

  • Row — para sa 5–10 static na elemento walang pag-scroll
  • LazyRow — para sa 10+ elemento na may pahalang na pag-scroll
  • LazyRow — para sa mga carousel, gallery, dynamic na listahan

Mga madalas itanong

Paano naiiba ang LazyRow sa LazyColumn?

LazyRow ay nag-scroll nang pahalang at nag-aayos ng mga elemento mula kaliwa pakanan, habang ang LazyColumn ay nag-scroll nang patayo mula itaas pababa. Pareho ay gumagamit ng parehong prinsipyo ng lazy loading, LazyListState at DSL functions na items.

Paano magdagdag ng SnapFlingBehavior sa LazyRow?

Ipasa ang SnapFlingBehavior(listState) sa flingBehavior parameter ng LazyRow. Ang SnapFlingBehaviour ay nagpapahinto sa LazyRow sa pinakamalapit na elemento, hindi sa pagitan ng mga elemento, na lumilikha ng epektong dumikit para sa mga carousel.

Paano gumawa ng LazyRow na may walang katapusang pag-scroll?

Subaybayan ang huling nakikitang elemento sa pamamagitan ng LazyListState.layoutInfo at mag-load ng bagong data kapag ang huling elemento ay lumalapit sa dulo ng listahan. Para sa cyclic scrolling, gumamit ng custom na implementasyon na may pagdodoble ng elemento.

Maaari bang gamitin ang LazyRow sa loob ng LazyColumn?

Oo, ang LazyRow ay maaaring ilagay sa loob ng LazyColumn. Ito ay isang karaniwang pattern para sa paggawa ng mga kumplikadong pahina na may pahalang na carousel sa loob ng isang patayong listahan. Bawat LazyRow ay dapat may fixed na taas para sa tamang paggana.

Paano matukoy na ang LazyRow ay na-scroll hanggang dulo?

Gamitin ang LazyListState.layoutInfo.visibleItemsInfo at ihambing ang index ng huling nakikitang elemento sa kabuuang bilang minus isa. Kapag ang mga halagang ito ay nagtugma, ang LazyRow ay nasa dulo ng listahan.

Buod

  • LazyRow — pahalang na listahan na may lazy loading, na gumagawa lamang ng mga nakikitang elemento at muling ginagamit ang mga ito sa pag-scroll para sa mahusay na pagtatrabaho sa malaking data.
  • horizontalArrangement namamahala sa distribusyon ng mga elemento nang pahalang, at ang contentPadding ay nagdaragdag ng padding sa mga gilid para sa tamang pagpapakita sa Material Design.
  • LazyListState nagbibigay ng programmatic scroll control sa pamamagitan ng animateScrollToItem at sumusuporta sa SnapFlingBehavior para sa pagdikit sa mga elemento.
  • LazyRow ay epektibo para sa mga carousel ng larawan, gallery, listahan ng kategorya, tab at pahalang na menu sa mga mobile interface.
  • contentType at key — pangunahing mga tool sa pag-optimize na nagpapababa ng recomposition at nagpapahusay ng muling paggamit ng mga elemento ng LazyRow.
  • Row ay angkop para sa 5–10 static na elemento, LazyRow — para sa dynamic o mahabang pahalang na listahan na may pag-scroll.
  • LazyRow ay maaaring ilagay sa LazyColumn para sa paggawa ng mga kumplikadong layout na may pahalang na carousel sa loob ng isang patayong listahan.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din