Column: vertikal joylashtirish va konteynerni sozlash Compose-da

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

Column — compose.foundation.layout paketidagi o'rnatilgan Jetpack Compose Composable komponenti bo'lib, bola elementlarni vertikal ravishda birin-ketin joylashtiradi. Column eski View tizimidagi vertikal yo'nalishdagi LinearLayout-ning analogidir, ammo undan farqli o'laroq deklarativ tavsifdan foydalanadi va holat o'zgarishlariga avtomatik javob beradi. Google Android Developers, 2026 ma'lumotlariga ko'ra, Column Row va Box bilan birga uchta asosiy konteynerdan biridir.

Asosiy

  • Column elementlarni Arrangement va Alignment sozlamalari bilan vertikal joylashtiradi
  • Arrangement elementlar orasidagi vertikal bo'shliqni taqsimlashni belgilaydi
  • Alignment har bir elementning Column ichidagi gorizontal tekislanishini o'rnatadi
  • Og'irlik (weight) bo'sh joyni elementlar o'rtasida mutanosib taqsimlaydi
  • IntrinsicSize Column-ga bola elementlarning minimal/maksimal kengligiga moslashishga imkon beradi

Jetpack Compose-da Column nima

Column — modifier, verticalArrangement, horizontalAlignment va content — ColumnScope bilan lambda qabul qiluvchi Composable funksiyadir. Column ichida bola Composable funksiyalari e'lon qilish tartibida yuqoridan pastga joylashtiriladi. Column balandligi bola elementlarning balandliklari yig'indisiga Arrangement tomonidan belgilangan bo'shliq qo'shilganiga teng. Kengligi — Alignment hisobga olingan holda bola elementning maksimal kengligi bo'yicha.

Column ko'rinmas konteynerdir: standart holatda o'z fon yoki chegarasiga ega emas. Agar fon kerak bo'lsa — Column-ning o'ziga Modifier.background() qo'shing. LazyColumn-dan farqli o'laroq, Column barcha bola elementlarni bir vaqtning o'zida ko'rsatadi va virtualizatsiyani qo'llab-quvvatlamaydi. Bu shuni anglatadiki, Column faqat kichik ma'lumotlar to'plamlari uchun mos keladi — 10-15 elementgacha. Uzun ro'yxatlar uchun LazyColumn-dan foydalaning.

ColumnScope — Column content lambdasi uchun receiver. U faqat Column ichida ishlaydigan qo'shimcha modifikatorlarni taqdim etadi: weight(), align(), alignByBaseline(). Bu modifikatorlar Column tashqarisida ma'noga ega emas, chunki ular vertikal joylashtirish xususiyatlariga tayanadi. Masalan, Modifier.align(Alignment.CenterHorizontally) bola elementni Column markaziga gorizontal ravishda tekislaydi.

Column parametrlari: Arrangement, Alignment, Modifier

VerticalArrangement elementlar orasidagi vertikal bo'shliq qanday taqsimlanishini belgilaydi. Mavjud qiymatlar: Arrangement.Top (standart), Bottom, Center, SpaceBetween, SpaceEvenly, SpaceAround. Agar Column balandligi elementlar balandliklari yig'indisidan katta bo'lsa, Arrangement bo'sh joyni taqsimlaydi. Agar elementlar butun balandlikni egallasa — Arrangement ta'sir qilmaydi.

HorizontalAlignment har bir bola elementning gorizontal tekislanishini o'rnatadi. Alignment.Start (standart, LTR), CenterHorizontally, End. Alignment har bir elementga mustaqil ta'sir qiladi: agar bir element tor, ikkinchisi keng bo'lsa — birinchisi tekislanadi, ikkinchisi Column chegaralaridan chiqib ketishi mumkin. Alignment faqat Column qat'iy kenglikka yoki fillMaxWidth-ga ega bo'lganda ishlaydi.

Column uchun Modifier: Column konteynerning o'ziga qo'llaniladigan Modifier-ni qabul qiladi. Modifier.fillMaxWidth(), fillMaxHeight(), size(), padding() — barcha standart modifikatorlar ishlaydi. Xususiyat: Modifier.height(IntrinsicSize.Min) Column-ni Intrinsic measurement hisobga olgan holda bola elementlar asosida minimal balandlikni hisoblashga majbur qiladi.

kotlin
@Composable
fun ColumnArrangementDemo() {
    Column(
        modifier = Modifier.fillMaxSize().background(Color(0xFFF5F5F5)),
        verticalArrangement = Arrangement.SpaceEvenly,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text("Yuqori", modifier = Modifier.background(Color.Cyan))
        Text("O'rta", modifier = Modifier.background(Color.Magenta))
        Text("Past", modifier = Modifier.background(Color.Yellow))
    }
}

    // IntrinsicSize: Column balandlikni mazmunga moslashtiradi
@Composable
fun IntrinsicColumn() {
    Column(
        modifier = Modifier
            .height(IntrinsicSize.Min)
            .width(200.dp)
    ) {
        Text("Qisqa matn")
        Text("Ustunga o'raladigan juda uzun matn")
    }
}
ArrangementXatti-harakat
Arrangement.TopElementlar tepaga siqilgan, bo'sh joy pastda
Arrangement.CenterElementlar markazda, bo'sh joy tepa va pastda teng taqsimlanadi
Arrangement.SpaceBetweenBirinchi element tepada, oxirgisi pastda, qolganlari teng
Arrangement.SpaceEvenlyBarcha elementlar va chekkalar orasida teng bo'shliqlar
Arrangement.SpaceAroundElementlar orasida teng bo'shliqlar, chekkalarda yarmi

Column weight: elementlar orasida bo'shliqni taqsimlash

Modifier.weight() — Column ichida vertikal bo'sh joyni elementlar o'rtasida belgilangan og'irliklarga mutanosib taqsimlovchi ColumnScope modifikatoridir. Agar Column 400dp balandlikni egallasa, bola elementlar esa jami 100dp bo'lsa, qolgan 300dp weight elementlari o'rtasida taqsimlanadi. weight(2f) bo'lgan element weight(1f) bo'lgan elementdan ikki barobar ko'p joy oladi.

fill — weight-ning ikkinchi parametri: weight(weight: Float, fill: Boolean = true). Agar fill = true (standart) bo'lsa, element butun mavjud balandlikka cho'ziladi. Agar fill = false bo'lsa — element faqat o'z intrinsic-balandligini egallaydi, qolgan bo'sh joy bo'sh qoladi. Bu element bir tomonga siqilishi kerak bo'lganda, lekin weight faqat bo'sh joyni taqsimlash nisbatini belgilaganda foydalidir.

Weight cheklovlari: weight faqat qat'iy balandlikka yoki fillMaxHeight()-ga ega Column-da ishlaydi. Agar Column balandligi bola elementlar tomonidan aniqlansa (wrap content), og'irliklar ma'noga ega emas — taqsimlash uchun bo'sh joy yo'q. Shuningdek, weight bir xil elementda Modifier.height() bilan birlashtirilmaydi — ular ziddiyatli va weight e'tiborga olinmaydi.

kotlin
@Composable
fun WeightedColumn() {
    Column(
        modifier = Modifier.fillMaxHeight().width(300.dp)
    ) {
        // Balandlikning 1/6 qismini egallaydi (og'irlik 1, jami 1+2+3=6)
        Box(
            modifier = Modifier
                .weight(1f)
                .fillMaxWidth()
                .background(Color.Red)
        )
        // Balandlikning 2/6 qismini egallaydi
        Box(
            modifier = Modifier
                .weight(2f)
                .fillMaxWidth()
                .background(Color.Green)
        )
        // Balandlikning 3/6 qismini egallaydi
        Box(
            modifier = Modifier
                .weight(3f)
                .fillMaxWidth()
                .background(Color.Blue)
        )
    }
}

Column vs LazyColumn: qachon nimani ishlatish

Column barcha bola elementlarni birdaniga ko'rsatadi. Agar elementlar 10-15 dan ko'p bo'lsa, Column kompozitsiya va o'lchash uchun sezilarli yuk hosil qiladi. LazyColumn, aksincha, faqat ko'rinadigan elementlarni render qiladi va ko'rinmaslarni qayta ishlatadi. Uzun ro'yxatlar, minglab elementli ro'yxatlar, cheksiz ro'yxatlar yoki chatlar uchun — LazyColumn majburiydir.

Column qachon yaxshiroq: formalar bilan ekranlar (3-10 maydon), profil kartalari, belgilar bilan vertikal ustunlar, menyu. Column shuningdek IntrinsicSize-ni qo'llab-quvvatlaydi, bu adaptiv balandlik uchun foydalidir. Bundan tashqari, Column tuzatishda osonroq — virtualizatsiya yo'q, barcha elementlar Layout Inspector-da ko'rinadi. Statik UI uchun Column to'g'ri tanlovdir.

LazyColumn ta'minlaydi: item caching, key-based identity, qo'shish/o'chirish animatsiyasi (animateItemPlacement), sticky headers. Agar ro'yxat har xil turdagi elementlarni o'z ichiga olsa (turli viewType) — items ichida sealed class bilan LazyColumn-dan foydalaning. Column sticky headers-ni qo'llab-quvvatlamaydi (ularni scrollable Column orqali emulyatsiya qilish kerak). LazyColumn shuningdek GridCells dan foydalanganda LazyVerticalGrid-ni qo'llab-quvvatlaydi.

MezonColumnLazyColumn
Elementlar soni10-15 gachaIstalgancha
UnumdorlikHar doim hammasini render qiladiFaqat ko'rinadigan + buffer
ScrollingModifier.verticalScroll orqaliIchki
IntrinsicSizeQo'llab-quvvatlaydiQo'llab-quvvatlamaydi
Sticky headersYo'q (emulyatsiya)Ha (stickyHeader)
Element animatsiyasiIchki yo'qanimateItemPlacement

Column-dan foydalanishning amaliy misollari

Foydalanuvchi profili ekranini ko'rib chiqamiz, bu erda Column avatar, ism, bio va harakat tugmalari uchun asosiy konteyner sifatida ishlatiladi. Bu erda Column IntrinsicSize.Min bilan mazmunga moslashadi, weight esa bo'limlar orasida bo'shliqni taqsimlash uchun qo'llaniladi.

kotlin
@Composable
fun UserProfileCard(name: String, bio: String) {
    Card(
        modifier = Modifier.fillMaxWidth().padding(16.dp),
        elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
    ) {
        Column(
            modifier = Modifier.fillMaxWidth().padding(16.dp),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.spacedBy(8.dp)
        ) {
            // Avatar
            Icon(
                imageVector = Icons.Default.AccountCircle,
                contentDescription = "Avatar",
                modifier = Modifier.size(64.dp)
            )
            // Ism
            Text(name, style = MaterialTheme.typography.headlineSmall)
            // Bio
            Text(bio, style = MaterialTheme.typography.bodyMedium,
                modifier = Modifier.padding(top = 4.dp))
            // Harakat tugmalari
            Row(
                horizontalArrangement = Arrangement.spacedBy(12.dp),
                modifier = Modifier.padding(top = 12.dp)
            ) {
                Button(onClick = { }) { Text("Xabar") }
                OutlinedButton(onClick = { }) { Text("Kuzatish") }
            }
        }
    }
}

Misolda Column elementlar orasida bir xil bo'shliqlar uchun Arrangement.spacedBy(8.dp) dan foydalanadi. horizontalAlignment = CenterHorizontally avatar, ism va bio-ni markazlashtiradi. Column ichidagi Row — tugmalar uchun bir qatorda joylashgan ichki konteyner. Column (vertikal joylashtirish) va Row (gorizontal joylashtirish) kombinatsiyasi Compose-da UI qurishning odatiy namunasidir.

Tez-tez beriladigan savollar

Column LazyColumn-dan unumdorlik bo'yicha qanday farq qiladi?

Column barcha bola elementlarni birdaniga render qiladi, bu 100+ elementda FPS tushishiga sabab bo'ladi. LazyColumn faqat ko'rinadigan elementlar + bufer (odatda 3-5 ekran) render qiladi. 3-10 elementli statik ekranlar uchun Column tezroq, chunki virtualizatsiya overhead-i yo'q.

Column-ni qanday aylanma qilish mumkin?

Column-ga Modifier.verticalScroll(rememberScrollState()) qo'shing. Bu Column-ni aylanma qiladi, ammo virtualizatsiya bermaydi — barcha elementlar baribir birdaniga render qilinadi. Uzun aylanma ro'yxatlar uchun LazyColumn dan foydalaning.

Row-ni Column-ga va Column-ni Row-ga joylashtirish mumkinmi?

Ha, Row/Column ichma-ich joylashtirish odatiy amaliyotdir. Ikkita konteynerni birlashtirib murakkab tarmoqlar qurish mumkin. Biroq, zaruratsiz chuqur ichma-ich joylashtirishdan (4+ daraja) qoching — bu LayoutNode o'lchovlari sonini oshiradi va kompozitsiyani sekinlashtiradi.

Column-dagi barcha elementlarning bir xil kengligini qanday qilish mumkin?

Har bir bola elementda Modifier.fillMaxWidth() dan foydalaning. Agar Column Modifier.fillMaxWidth()-ga ega bo'lsa, fillMaxWidth() bo'lgan barcha bola elementlar butun kenglikka cho'ziladi. Muqobil: Column qat'iy konteynerda bo'lsa, ColumnScope da Modifier.weight(1f).

Column-da spacedBy qanday ishlaydi?

Arrangement.spacedBy(space) har ikki qo'shni element orasiga qat'iy bo'shliq qo'shadi. SpaceBetween/SpaceAround dan farqli o'laroq, spacedBy elementlarni cho'zmaydi — bo'shliq qat'iy, qolgan bo'sh joy Column oxirida qoladi. spacedBy birinchi element oldidan va oxirgi element keyin bo'shliq qo'shmaydi.

Xulosa

  • Column — elementlarni yuqoridan pastga joylashtirish uchun asosiy vertikal Compose konteyneri
  • Arrangement bo'shliqni taqsimlashni boshqaradi (Top, Center, SpaceBetween, spacedBy)
  • Alignment har bir bola elementning gorizontal tekislanishini o'rnatadi
  • Weight bo'sh joyni elementlar o'rtasida mutanosib taqsimlaydi
  • Column vs LazyColumn: Column 3-10 element uchun, LazyColumn uzun ro'yxatlar uchun
  • IntrinsicSize Column-ga balandlikni bolalarning minimal o'lchamiga moslashtirishga imkon beradi
  • Tavsiya: har bir elementda padding o'rniga elementlar orasidagi bo'shliqlar uchun spacedBy 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