Jetpack Compose'ta LazyRow — nedir, özellikleri ve nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-06-29 Okuma süresi: 10 dk

LazyRow — Jetpack Compose'ta öğelerin yavaş yüklenmesiyle yatay listeler oluşturmak için bir composable fonksiyondur. Row'un aksine, LazyRow yalnızca görünür öğeleri oluşturur ve yatay kaydırma sırasında bunları yeniden kullanır. Google Android Documentation, 2025'e göre LazyRow, LazyColumn'un yatay eşdeğeridir ve mobil uygulamalarda karuseller, galeriler ve yatay menüler için etkilidir.

Önemli Noktalar

  • LazyRow — yavaş yüklemeli Jetpack Compose yatay listesi, yatay kaydırma sırasında yalnızca görünür öğeleri oluşturur.
  • horizontalArrangement öğelerin yatay düzenini yönetirken, contentPadding konteyner kenarlarına dolgu ekler.
  • LazyListState yatay kaydırma konumunu izler ve animateScrollToItem aracılığıyla programatik kontrol sağlar.
  • LazyRow mobil arayüzlerde resim karuselleri, kategori listeleri, yatay galeriler ve sekmeler için etkilidir.
  • contentType ve key, LazyRow'da öğe yeniden kullanımını optimize ederek kaydırma sırasında yeniden oluşturmayı azaltır.

Jetpack Compose'ta LazyRow Nedir

LazyRow — öğelerin yavaş yüklenmesiyle yatay kaydırılabilir bir liste uygulayan composable bir fonksiyondur. Tüm alt öğeleri aynı anda oluşturan Row'un aksine, LazyRow yalnızca görünüm alanında görünen öğeleri oluşturur.

LazyRow, LazyColumn ile aynı prensipte çalışır ancak öğeleri yatay olarak düzenler. Sola veya sağa kaydırıldığında, görünüm alanından çıkan öğeler yenilerini görüntülemek için yeniden kullanılır. Bu, çok sayıda resim içeren galeriler veya uzun kategori listeleri için kritik öneme sahiptir.

Android Developers Blog, 2024'e göre LazyRow, LazyColumn ile aynı LazyList mimarisini kullanır: LazyListState, Pool aracılığıyla yeniden kullanım mekanizması ve farklı öğe türleri desteği dahil. Maksimum verimlilik, sabit öğe yüksekliği ile elde edilir.

LazyRow Temel İmzası

LazyRow, modifier, state, contentPadding, reverseLayout, horizontalArrangement ve verticalAlignment parametrelerini kabul eder. İçerik, LazyColumn'a benzer şekilde DSL fonksiyonları items ve item ile tanımlanır.

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

LazyRow Özellikleri: horizontalArrangement ve contentPadding

horizontalArrangement, LazyRow içinde yatay eksen boyunca öğelerin dağılımını yönetir. Row'da olduğu gibi aynı Arrangement değerleri mevcuttur: Start, Center, End, SpaceBetween, SpaceEvenly, SpaceAround ve özel boşluklu spacedBy.

contentPadding, LazyRow konteynerinin kenarlarına dolgu ekler. Modifier.padding'ın aksine, contentPadding kaydırma sırasında dikkate alınır: ilk öğe sol kenardan, son öğe sağ kenardan dolguya sahip olur. Material Design Guidelines, 2025'e göre, karuseller ve galeriler için contentPadding zorunludur, böylece ilk ve son öğe ekran kenarına yapışmaz.

verticalAlignment, LazyRow içinde öğeleri dikey olarak hizalar. Varsayılan olarak Alignment.Top kullanılır. Farklı yükseklikteki öğeleri ortalamak için Alignment.CenterVertically kullanın, bu farklı en-boy oranlarına sahip resimler içeren karuseller için kullanışlıdır.

LazyRow Parametre Tablosu

ParametreAçıklamaVarsayılan Değer
horizontalArrangementÖğelerin yatay dağılımıArrangement.Start
contentPaddingKonteyner kenarlarında dolguPaddingValues(0.dp)
verticalAlignmentDikey hizalamaAlignment.Top
reverseLayoutTers öğe sırasıfalse
userScrollEnabledKullanıcı kaydırmasını etkinleştirtrue

LazyListState ile Yatay Kaydırma Yönetimi

LazyListState, LazyRow için LazyColumn ile aynı şekilde çalışır: ilk görünür öğeyi, ofseti ve genel kaydırma konumunu izler. Durum, rememberLazyListState() aracılığıyla oluşturulur ve state parametresine iletilir.

LazyRow'un programatik kaydırma kontrolü aynı yöntemlerle yapılır: yumuşak animasyon için animateScrollToItem ve anlık kaydırma için scrollToItem. Her ikisi de bir coroutine içinde çağrılır. Bu, ileri/geri düğmeleri olan karuseller veya otomatik kaydırma için kullanışlıdır.

Android Developers, 2024'e göre LazyRow ayrıca SnapFlingBehavior'u da destekler — öğeler arasında değil, en yakın öğede duran hızlı kaydırma davranışı. Bu, karuseller ve galeriler için tanıdık bir yapışma efekti oluşturur.

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("Başlamak için") }
        }
    }
}

Arayüzlerde LazyRow Kullanım Örnekleri

İlk örnek — önizlemeli resim galerisi için LazyRow. Her öğe, bir resim ve altyazı içeren bir Box'tır. LazyRow, onlarca ve yüzlerce resmi verimli bir şekilde işler, yalnızca görünür olanları yükler.

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

İkinci örnek — simgeli kategori listesi için LazyRow. Kategoriler çip olarak görüntülenir ve kullanıcı bunları yatay olarak kaydırabilir. spacedBy ve contentPadding ile LazyRow, kategoriler arasında ve kenarlarda boşluk oluşturur.

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: Ne Zaman Hangisini Seçmeli

LazyRow ve Row arasındaki seçim öğe sayısına bağlıdır. Row, ekranda her zaman görünen 5–10 öğe için uygundur. LazyRow, çok sayıda öğe olduğunda veya sayıları dinamik olduğunda gereklidir.

Row tüm öğeleri aynı anda oluşturur ve çok sayıda öğe olduğunda gecikmelere neden olur. LazyRow yalnızca görünür öğeleri oluşturur, bu da onu kaydırılabilir listeler için tercih edilir kılar. Android Developers Blog, 2024'e göre eşik yaklaşık 10 öğedir: daha fazla öğe varsa LazyRow kullanın.

LazyRow ayrıca animasyonları, SnapFlingBehavior'u ve ayırıcılar aracılığıyla gruplamayı destekler, bu da onu karmaşık arayüzler için daha esnek kılar. Row daha basittir ve LazyListState gerektirmez, ancak uzun listeler için optimize edilmemiştir.

  • Row — kaydırmasız 5–10 statik öğe için
  • LazyRow — yatay kaydırmalı 10+ öğe için
  • LazyRow — karuseller, galeriler, dinamik listeler için

Sıkça Sorulan Sorular

LazyRow, LazyColumn'dan nasıl farklıdır?

LazyRow yatay olarak kayar ve öğeleri soldan sağa düzenlerken, LazyColumn dikey olarak yukarıdan aşağıya kayar. Her ikisi de aynı yavaş yükleme prensiplerini, LazyListState'i ve DSL items fonksiyonlarını kullanır.

LazyRow'a SnapFlingBehavior nasıl eklenir?

SnapFlingBehavior(listState)'u LazyRow'un flingBehavior parametresine iletin. SnapFlingBehavior, LazyRow'un öğeler arasında değil en yakın öğede durmasını sağlayarak karuseller için yapışma efekti oluşturur.

Sonsuz kaydırmalı LazyRow nasıl yapılır?

LazyListState.layoutInfo aracılığıyla son görünür öğeyi izleyin ve son öğe listenin sonuna yaklaştığında yeni veri yükleyin. Döngüsel kaydırma için öğe çoğaltmalı özel bir uygulama kullanın.

LazyRow, LazyColumn içinde kullanılabilir mi?

Evet, LazyRow LazyColumn içine yerleştirilebilir. Bu, dikey bir liste içinde yatay karusellerle karmaşık sayfalar oluşturmak için standart bir desendir. Her LazyRow'un doğru çalışması için sabit bir yüksekliği olmalıdır.

LazyRow'un sonuna kadar kaydırıldığı nasıl anlaşılır?

LazyListState.layoutInfo.visibleItemsInfo kullanın ve son görünür öğenin indeksini toplam sayıdan bir çıkararak karşılaştırın. Bu değerler eşleştiğinde, LazyRow listenin sonundadır.

Özet

  • LazyRow — yavaş yüklemeli yatay liste, büyük verileri verimli bir şekilde işlemek için kaydırma sırasında yalnızca görünür öğeleri oluşturur ve yeniden kullanır.
  • horizontalArrangement öğelerin yatay dağılımını yönetirken, contentPadding Material Design'da doğru görüntüleme için kenarlara dolgu ekler.
  • LazyListState, animateScrollToItem aracılığıyla programatik kaydırma kontrolü sağlar ve öğelere yapışma için SnapFlingBehavior'u destekler.
  • LazyRow mobil arayüzlerde resim karuselleri, galeriler, kategori listeleri, sekmeler ve yatay menüler için etkilidir.
  • contentType ve key, yeniden oluşturmayı azaltan ve LazyRow'da öğe yeniden kullanımını iyileştiren ana optimizasyon araçlarıdır.
  • Row 5–10 statik öğe için uygundur, LazyRow — kaydırmalı dinamik veya uzun yatay listeler için.
  • LazyRow, dikey bir liste içinde yatay karusellerle karmaşık düzenler oluşturmak için LazyColumn içine yerleştirilebilir.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun