Row Jetpack Compose-da: bu nima, composable xususiyatlari va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-06-28 O'qish vaqti: 10 daq

Row — Jetpack Compose-da bola elementlarni gorizontal qatorga joylashtirish uchun composable funksiya. Column-dan farqli o'laroq, Row elementlarni chapdan o'ngga joylashtiradi va horizontalArrangement hamda verticalAlignment parametrlari orqali joylashuvni sozlashni qo'llab-quvvatlaydi. Google Android Documentation, 2025-ga ko'ra, Row Column va Box bilan birga Compose-ning uchta asosiy konteyneridan biri bo'lib, interfeysning gorizontal tuzilmalarini yaratish uchun ishlatiladi: tugma qatorlari, kiritish maydonlari va matnli ikonkalar.

Asosiy fikrlar

  • Row — bola komponentlarni bir qator bo'ylab chapdan o'ngga joylashtiradigan Jetpack Compose gorizontal konteyneri.
  • horizontalArrangement elementlarning gorizontal taqsimlanishini boshqaradi: teng ravishda, bo'shliqlar bilan yoki konteyner oxirida.
  • verticalAlignment elementlarni vertikal ravishda konteynerga nisbatan tekislaydi: yuqori chekka, markaz yoki pastki chekka.
  • Modifier.weight Row elementlari o'rtasida mavjud joyni ko'rsatilgan vaznga muvofiq taqsimlashga imkon beradi.
  • Row mobil interfeyslarda tugma qatorlari, ikonka ro'yxatlari, kiritish maydonlari va gorizontal asboblar panellarini yaratish uchun samarali.

Jetpack Compose-da Row nima

Row — bola elementlarni gorizontal ketma-ketlikda joylashtiradigan composable funksiya. Compose layoutlari iyerarxiyasida Row Column va Box bilan birga asosiy konteyner o'rnini egallaydi.

Row o'lchamlarni ko'rsatishni talab qilmaydi — u avtomatik ravishda mazmunga moslashadi. Row kengligi, Modifier.fillMaxWidth yoki qat'iy o'lcham o'rnatilmagan bo'lsa, bo'shliqlarni hisobga olgan holda bola elementlar kengliklari yig'indisiga teng.

Row ning bola elementlari konteyner ichida o'z o'rniga ta'sir qiladigan o'z modifikatorlariga ega bo'lishi mumkin. Masalan, Modifier.weight elementlarga mavjud joyning mutanosib qismini egallashga imkon beradi.

Android Developers Blog, 2024-ga ko'ra, Row bola elementlarini ketma-ket qayta ishlaydi, ularning o'lchamlarini Compose o'lchash qoidalari asosida hisoblab chiqadi: avval weightsiz elementlar o'lchanadi, keyin qolgan joy weightga ega elementlar o'rtasida taqsimlanadi.

Row sintaksisi va asosiy imzosi

Row ning asosiy imzosi modifier, horizontalArrangement va verticalAlignment parametrlarini o'z ichiga oladi. Barcha bola elementlar oxirgi lambda content blokida uzatiladi.

kotlin
@Composable
fun RowExample() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly,
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(text = "Bir")
        Text(text = "Ikki")
        Text(text = "Uch")
    }
}

Row xususiyatlari: horizontalArrangement va verticalAlignment

horizontalArrangement parametri bola elementlarning Row ichida gorizontal o'q bo'ylab qanday taqsimlanishini aniqlaydi. Arrangement sinfidan Start, End, Center, SpaceBetween, SpaceAround va SpaceEvenly qiymatlari mavjud.

Arrangement.Start elementlarni konteyner boshida, Arrangement.End — oxirida, Arrangement.Center esa markazda joylashtiradi. Bu qiymatlar CSS Flexbox-dagi justify-content xususiyatiga o'xshab ishlaydi.

Arrangement.SpaceBetween elementlarni teng taqsimlaydi, birinchi elementni boshda, oxirgini oxirda, qolganlarini esa orasida teng bo'shliqlar bilan joylashtiradi. Material Design Guidelines, 2025-ga ko'ra, SpaceBetween asboblar paneli va navigatsiya qatorlari uchun maqbuldir.

verticalAlignment parametri elementlarni vertikal tekislaydi. Alignment.Top, Alignment.CenterVertically va Alignment.Bottom qiymatlari mavjud. Bu xususiyat Row elementlari turli balandlikka ega bo'lganda foydali — masalan, ko'p qatorli matn yonidagi ikonka.

Arrangement qiymatlari jadvali

QiymatTavsifQo'llanilishi
StartElementlar Row boshiga tortilganChapga tekislangan qatorlar
CenterElementlar konteyner markazidaGorizontal menyular, sarlavhalar
SpaceBetweenTeng, birinchi boshda, oxirgi oxirdaAsboblar paneli, navigatsiya
SpaceEvenlyElementlar orasida va chekkalarda teng bo'shliqlarTugma qatorlari, teng to'rlar
SpaceAroundElementlar orasida teng bo'shliqlar, chekkalarda yarim bo'shliqKarusellar, ikonka galereyalari

Modifier.weight bilan joy taqsimlash

Modifier.weight — faqat Row va Column ichida mavjud bo'lgan modifikator bo'lib, mavjud joyni bola elementlar o'rtasida ko'rsatilgan qiymatga mutanosib taqsimlaydi. Agar bir element 1.0f vaznga, boshqasi 2.0f vaznga ega bo'lsa, ikkinchi element ikki barobar ko'proq joy egallaydi.

Weight ko'rsatilmagan elementlar o'z mazmuni uchun kerakli joyni egallaydi. Qolgan joy weightga ega elementlar o'rtasida ularning vazniga mutanosib taqsimlanadi. Bu xatti-harakat CSS Flexbox-dagi flex-grow xususiyatiga o'xshaydi.

Android Developer Documentation, 2025-ga ko'ra, weight faqat Row, Column va BoxWithConstraints ichida ishlaydi. Rowda weight ishlatilganda, barcha bola elementlar ikki bosqichda o'lchanadi: avval weightsiz elementlar, keyin weightga ega elementlar.

kotlin
@Composable
fun WeightExample() {
    Row(
        modifier = Modifier.fillMaxWidth(),
        horizontalArrangement = Arrangement.Start
    ) {
        Text(
            text = "Chap",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "O'ng")
    }
}

Row bilan kod misollari

Birinchi misol ikonka va matn bilan Row-ni ko'rsatadi — kontaktlar ro'yxati yoki sozlamalar uchun odatiy stsenariy. Icon va Text markazlashtirilgan verticalAlignment bilan Row-ga o'ralgan.

kotlin
@Composable
fun IconWithText() {
    Row(
        verticalAlignment = Alignment.CenterVertically,
        modifier = Modifier.padding(8.dp)
    ) {
        Icon(
            imageVector = Icons.Default.Favorite,
            contentDescription = "Favorite"
        )
        Spacer(modifier = Modifier.width(8.dp))
        Text(text = "Sevimlilarga qo'shish")
    }
}

Ikkinchi misol tugmalar va teng taqsimlash bilan Row-ni ko'rsatadi. SpaceEvenly barcha tugmalar va konteyner chekkalari o'rtasida teng bo'shliqlarni kafolatlaydi.

kotlin
@Composable
fun ButtonRow() {
    Row(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        horizontalArrangement = Arrangement.SpaceEvenly
    ) {
        Button(onClick = {}) { Text("Bekor qilish") }
        Button(onClick = {}) { Text("Saqlash") }
    }
}

Uchinchi misol — reytingni ko'rsatish uchun Card ichidagi Row. Modifier.weight bilan ichki Row reyting yulduzchasi va raqamli qiymatga qat'iy joy egallashga imkon beradi.

kotlin
@Composable
fun RatingRow(rating: Float) {
    Row(
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(
            text = "Reyting:",
            modifier = Modifier.weight(1.0f)
        )
        Text(text = "$rating / 5.0")
    }
}

Adaptiv dizaynda Row xususiyatlari

Row adaptiv dizaynda kenglik nazoratini talab qiladi. Agar Row mazmuni ekranning mavjud kengligidan oshsa, elementlar konteyner chegaralaridan chiqib ketishi mumkin. Buning oldini olish uchun Modifier.horizontalScroll yoki Column-ga o'tishdan foydalaning.

Row-ni Modifier.weight bilan birlashtirganda, ota Row uchun fillMaxWidth o'rnatish muhim — aks holda weight mavjud bo'lmagan joyni taqsimlaydi. Material Design Guidelines, 2025-ga ko'ra, fillMaxWidthsiz weight bilan Row noto'g'ri konfiguratsiya hisoblanadi.

Adaptiv interfeyslar uchun Row-ni Box bilan birlashtirish yoki turli ekran o'lchamlarida elementlarning avtomatik taqsimlanishi uchun Arrangement.SpaceBetween dan foydalanish tavsiya etiladi. Bu media so'rovlarisiz moslashuvchanlikni ta'minlaydi.

  • Modifier.horizontalScroll — Row to'lib ketganda aylantirish qo'shadi
  • Modifier.weight — joyni mutanosib taqsimlaydi
  • Arrangement.SpaceBetween — chekkalarda fiksatsiya bilan adaptiv taqsimlash

Tez-tez so'raladigan savollar

Row Jetpack Compose-da Column-dan qanday farq qiladi?

Row elementlarni gorizontal (chapdan o'ngga), Column esa vertikal (yuqoridan pastga) joylashtiradi. Row eski View yondashuvidagi gorizontal LinearLayout-ni, Column esa vertikal LinearLayout-ni almashtiradi.

Row-ni aylantirish bilan qanday qilish mumkin?

Row-ga Modifier.horizontalScroll modifikatorini qo'shing. Katta ro'yxatlar uchun LazyRow dan foydalaning — u faqat ko'rinadigan elementlarni render qiladi va aylantirishda ularni qayta ishlatadi.

Row-ni boshqa Row ichiga joylashtirish mumkinmi?

Ha, Row boshqa Row, Column yoki Box ichiga joylashtirilishi mumkin. Joylashtirishda ichki Row kenglikni ota konteynerdan olishini yodda tuting va kerak bo'lsa har bir daraja uchun fillMaxWidth o'rnating.

Row-da Modifier.weight nima qiladi?

Modifier.weight Row-dagi qolgan joyni bola elementlar o'rtasida ko'rsatilgan vaznga mutanosib taqsimlaydi. Vazni 2.0f bo'lgan element vazni 1.0f bo'lgan elementdan ikki barobar kengroq bo'ladi. Weight faqat Row va Column ichida ishlaydi.

Row elementlarini vertikal markazga qanday tekislash mumkin?

Row yaratishda verticalAlignment = Alignment.CenterVertically parametridan foydalaning. Bu barcha bola elementlarni balandligidan qat'i nazar vertikal o'q bo'ylab tekislaydi.

Xulosa

  • Row — elementlarni chapdan o'ngga qatorda joylashtirish uchun Compose gorizontal konteyneri, sozlanishi joylashuv va tekislash bilan.
  • horizontalArrangement elementlarning gorizontal taqsimlanishini boshqaradi: Start, Center, End, SpaceBetween, SpaceEvenly va SpaceAround.
  • verticalAlignment elementlarni vertikal ravishda Alignment.Top, CenterVertically yoki Bottom orqali tekislaydi.
  • Modifier.weight bo'sh joyni elementlar o'rtasida ko'rsatilgan vaznga mutanosib taqsimlaydi, CSS-dagi flex-grow ga o'xshab.
  • Row ichma-ich joylashtirish, Modifier.horizontalScroll bilan aylantirish va boshqa Compose konteynerlari bilan ishlashni qo'llab-quvvatlaydi.
  • Adaptiv dizaynda weight bilan Row uchun Modifier.fillMaxWidth o'rnatish muhim, aks holda elementlar joyni to'g'ri taqsimlamaydi.
  • Ko'p elementli gorizontal ro'yxatlar uchun optimal ishlash uchun Row o'rniga LazyRow dan foydalaning.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing