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

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

Box — bu Jetpack Compose-da bola elementlarni bir-birining ustiga qatlam prinsipi bo'yicha joylashtirish uchun composable funksiyadir. Row va Column-dan farqli o'laroq, Box elementlarni bir maydonga to'playdi, bu esa teksturalar, nishonlar va maxsus ko'rsatkichlar yaratish imkonini beradi. Google Android Documentation, 2025-ga ko'ra, Box Compose-ning uchta asosiy konteyneridan biri bo'lib, Modifier.align va Modifier.zIndex yordamida qatlamlarni moslashuvchan boshqarishni ta'minlaydi.

Asosiy fikrlar

  • Box — elementlarni bir-birining ustiga qo'yadigan Compose konteyneri, har bir keyingi element oldingisining ustida chiziladi.
  • contentAlignment Box-ning barcha tarkibining tekislanishini belgilaydi, Modifier.align esa har bir bola elementning individual joylashishini ta'minlaydi.
  • Modifier.zIndex elementlarni chizish tartibini boshqaradi, ba'zi qatlamlarni boshqalarining ustiga ko'tarish imkonini beradi.
  • Box matnni tasvirlar ustiga qo'yish, bildirishnoma belgilari, nishonlar va fon qoplamalarini yaratish uchun ishlatiladi.
  • Modifier.clipToBounds bola elementlarning chizilishini Box chegaralari bilan cheklaydi, tarkibning konteynerdan chiqib ketishini oldini oladi.

Jetpack Compose-da Box nima

Box — bola elementlarni bir maydonda joylashtiruvchi, ularni bir-birining ustiga qo'yuvchi composable funksiyadir. Birinchi bola element pastda, oxirgisi — tepada chiziladi. Odatiy bo'lib Box eng katta bola elementning o'lchamiga moslashadi.

Row va Column-dan farqli o'laroq, Box elementlarni ketma-ket joylashtirmaydi — barcha bola elementlar bir maydonni egallaydi va bir-birini yopishi mumkin. Bu Box-ni interfeys qatlamlari kompozitsiyasi uchun ajralmas qiladi.

Box o'lchami qoida bo'yicha aniqlanadi: agar hech bir bola elementning qat'iy o'lchami bo'lmasa, Box minimal o'lchamga qadar yig'iladi. Agar kamida bitta bola elementda Modifier.fillMaxSize bo'lsa, Box maksimal o'lchamga qadar kengayadi.

Android Developers Blog, 2024-ga ko'ra, Box elementlar ketma-ket joylashishni talab qilmaydigan hollarda Compose-dagi eng samarali konteynerdir. Row va Column-dan farqli o'laroq, Box joylashish uchun qo'shimcha o'lchovlarni amalga oshirmaydi.

Box-ning asosiy imzosi

Box modifier, contentAlignment va propagateMinConstraints parametrlarini qabul qiladi. Barcha bola elementlar content blokida uzatiladi, bu erda har biri o'z modifierlariga ega bo'lishi mumkin.

kotlin
@Composable
fun BoxExample() {
    Box(
        modifier = Modifier.size(200.dp),
        contentAlignment = Alignment.Center
    ) {
        Box(
            modifier = Modifier.fillMaxSize().background(Color.Blue)
        )
        Text(
            text = "Salom",
            color = Color.White
        )
    }
}

Box-da ContentAlignment va Modifier.align

contentAlignment — Box-ning barcha bola elementlar uchun standart tekislanishni belgilaydigan parametridir. Ko'rsatilmagan bo'lsa, Alignment.TopStart ishlatiladi — elementlar konteynerning yuqori chap burchagida joylashtiriladi.

Modifier.align contentAlignment-dan qat'iy nazar ma'lum bir bola elementning tekislanishini o'zgartirishga imkon beradi. Masalan, Alignment.Center bilan Box-da Modifier.align(Alignment.BottomEnd) bo'lgan element pastki o'ng burchakka suriladi.

Material Design Guidelines, 2025-ga ko'ra, Modifier.align nishonlar va belgilarni fon tasvirlari ustida joylashtirish uchun foydalidir. Bu Box-ning barcha tarkibi uchun umumiy tekislanishni o'rnatish va uni alohida elementlar uchun o'zgartirish imkonini beradi.

Alignment qiymatlari jadvali

QiymatBox-dagi joylashuvQo'llash misoli
TopStartYuqori chap burchakKarta burchagidagi ikonka
TopCenterYuqori markazTasvir ustidagi sarlavha
CenterKonteyner markaziFonda markazlashtirilgan matn
BottomEndPastki o'ng burchakIkonkadagi bildirishnoma hisoblagichi
BottomCenterPastki markazTasvir ostidagi izoh

Modifier.align bilan misol

Ushbu misolda Box fon tasviri va pastki o'ng burchakda nishonni o'z ichiga oladi. Modifier.align(BottomEnd) nishonni butun Box-ning contentAlignment-dan mustaqil ravishda joylashtiradi.

kotlin
@Composable
fun BadgeExample() {
    Box(
        modifier = Modifier.size(120.dp),
        contentAlignment = Alignment.Center
    ) {
        Box(
            modifier = Modifier.size(100.dp).background(Color.Gray)
        )
        Box(
            modifier = Modifier
                .size(30.dp)
                .align(Alignment.BottomEnd)
                .background(Color.Red, CircleShape)
        )
    }
}

zIndex bilan qatlamlarni boshqarish

Modifier.zIndex Box ichidagi elementlarni chizish tartibini boshqaradi. Odatiy bo'lib elementlar e'lon qilish tartibida chiziladi — birinchi element pastda, oxirgisi tepada. zIndex bu tartibni o'zgartiradi.

zIndex qiymati 2.0f bo'lgan element, koddagi tartibidan qat'iy nazar, zIndex 1.0f bo'lgan elementning ustida chiziladi. Salbiy zIndex qiymatlari elementni boshqalardan pastga tushiradi. Android Developers, 2024-ga ko'ra, zIndex faqat chizish tartibiga ta'sir qiladi, teginish hodisalarini qayta ishlashga ta'sir qilmaydi.

zIndex ayniqsa animatsiyalar va draggable komponentlarda foydali, bu erda element vaqtincha boshqalarning ustiga ko'tarilishi kerak. Masalan, kartani sudrab olib borishda uning zIndex qiymati oshiriladi, shunda u qo'shni elementlar tomonidan yopilmaydi.

kotlin
@Composable
fun ZIndexExample() {
    Box(modifier = Modifier.size(150.dp)) {
        Box(modifier = Modifier.size(80.dp)
            .align(Alignment.TopStart)
            .zIndex(2.0f)
            .background(Color.Green))
        Box(modifier = Modifier.size(100.dp)
            .align(Alignment.Center)
            .zIndex(1.0f)
            .background(Color.Blue))
    }
}

Box-dan foydalanishning amaliy misollari

Box matnni tasvir ustiga qo'yish uchun keng qo'llaniladi. Fon tasviri birinchi joylashtiriladi, so'ngra matn Modifier.align bilan fon ustiga joylashtiriladi.

kotlin
@Composable
fun ImageWithOverlay() {
    Box(modifier = Modifier.fillMaxWidth().height(200.dp)) {
        Image(
            painter = painterResource(R.drawable.photo),
            contentDescription = "Photo",
            modifier = Modifier.fillMaxSize(),
            contentScale = ContentScale.Crop
        )
        Box(
            modifier = Modifier.fillMaxSize()
                .background(Color.Black.copy(alpha = 0.4f))
        )
        Text(
            text = "Sarlavha",
            color = Color.White,
            modifier = Modifier.align(Alignment.BottomStart)
                .padding(16.dp)
        )
    }
}

Ikkinchi misol — yuklash ko'rsatkichini yaratish uchun Box. Box butun ekran maydonini egallaydi, CircularProgressIndicator esa contentAlignment orqali markazlashtiriladi.

kotlin
@Composable
fun LoadingOverlay() {
    Box(
        modifier = Modifier.fillMaxSize(),
        contentAlignment = Alignment.Center
    ) {
        CircularProgressIndicator(
            modifier = Modifier.size(48.dp)
        )
    }
}

Box o'lcham cheklovlari

Box odatiy bo'lib tarkibning o'lchamiga moslashadi. Bola elementlar turli o'lchamlarga ega bo'lsa, Box eng katta elementning o'lchamini qabul qiladi. Bola elementlar bo'lmaganda, Box minimal o'lchamga qadar yig'iladi.

Modifier.clipToBounds bola elementlarning chizilishini Box chegaralari bilan cheklaydi. Ushbu modifiersiz bola elementlar Box-dan chiqib ketishi mumkin. Material Design Guidelines, 2025-ga ko'ra, Box ichida Modifier.scale yoki Modifier.graphicsLayer ishlatilganda clipToBounds majburiydir.

propagateMinConstraints — bola elementlarga minimal o'lcham cheklovlarini uzatuvchi Box parametridir. true qilib belgilansa, bola elementlar Box-ning minimal o'lchamidan kichik bo'la olmaydi. Bu xatti-harakat qat'iy minimal o'lchamlarga ega maxsus konteynerlarni yaratishda muhimdir.

  • Box — o'lchamlar ko'rsatilmagan va fillMaxSize bilan bola elementlar bo'lmasa, minimal konteyner
  • Modifier.clipToBounds tarkibning Box chegaralaridan chiqib ketishini oldini oladi
  • propagateMinConstraints bola elementlarga minimal cheklovlarni uzatadi

Tez-tez beriladigan savollar

Box Row va Column-dan nima bilan farq qiladi?

Box elementlarni bir-birining ustiga qo'yadi, Row va Column esa ularni ketma-ket joylashtiradi. Box qatlamlar va qoplamalar uchun, Row — gorizontal qatorlar, Column — vertikal ro'yxatlar uchun mos keladi.

Box-da bir elementni boshqalardan farqli ravishda qanday tekislash mumkin?

Muayyan bola element uchun Modifier.align dan foydalaning. Bu modifier butun Box uchun belgilangan contentAlignment ni o'zgartiradi. Masalan, Modifier.align(Alignment.BottomEnd) elementni pastki o'ng burchakka suradi.

Fon rangi va markazlashtirilgan matn bilan Box qanday yaratiladi?

Box ni Modifier.size va Modifier.background bilan sozlang, contentAlignment ni esa Alignment.Center ga o'rnating. Box ichidagi matn qo'shimcha modifiersiz avtomatik ravishda markazlashtiriladi.

Box-da propagateMinConstraints nima?

propagateMinConstraints Box-ning minimal o'lcham cheklovlarini bola elementlarga uzatadi. true qiymatida bola elementlar Modifier.size yoki Modifier.constrain bilan Box uchun belgilangan minimal o'lchamdan kichik bo'la olmaydi.

Box-da bir elementni ikkinchisining ustida tartib bilan qanday joylashtirish mumkin?

Box da elementlarning e'lon qilish tartibi ularning vizual tartibini belgilaydi: birinchi element pastda, oxirgisi — tepada. Aniq boshqarish uchun Modifier.zIndex dan foydalaning — katta qiymatga ega element boshqalarning ustida chiziladi.

Xulosa

  • Box — bola elementlarni bir maydonda bir-birining ustiga qo'yadigan Compose konteyneri, har bir keyingi element oldingisining ustida chiziladi.
  • contentAlignment barcha bola elementlar uchun standart tekislanishni belgilaydi, Modifier.align esa individual joylashishni ta'minlaydi.
  • Modifier.zIndex qatlamlarning chizilish tartibini boshqaradi, elementlarni e'lon qilish tartibidan qat'iy nazar ko'tarish yoki tushirish imkonini beradi.
  • Box matnni tasvirlar ustiga qo'yish, nishonlar, yuklash ko'rsatkichlari va fon qoplamalarini yaratish uchun ishlatiladi.
  • Modifier.clipToBounds bola elementlarning chizilishini Box chegaralari bilan cheklaydi, tarkibning konteynerdan chiqib ketishini oldini oladi.
  • propagateMinConstraints bola elementlarga minimal cheklovlarni uzatadi, bu qat'iy minimal o'lchamlarga ega maxsus konteynerlarni yaratishda foydali.
  • Elementlarni gorizontal yoki vertikal ketma-ket joylashtirish uchun Row yoki Column, qatlamlar va qoplamalar uchun esa Box 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