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 — 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 modifier, contentAlignment va propagateMinConstraints parametrlarini qabul qiladi. Barcha bola elementlar content blokida uzatiladi, bu erda har biri o'z modifierlariga ega bo'lishi mumkin.
@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
)
}
}
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.
| Qiymat | Box-dagi joylashuv | Qo'llash misoli |
|---|---|---|
| TopStart | Yuqori chap burchak | Karta burchagidagi ikonka |
| TopCenter | Yuqori markaz | Tasvir ustidagi sarlavha |
| Center | Konteyner markazi | Fonda markazlashtirilgan matn |
| BottomEnd | Pastki o'ng burchak | Ikonkadagi bildirishnoma hisoblagichi |
| BottomCenter | Pastki markaz | Tasvir ostidagi izoh |
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.
@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)
)
}
}
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.
@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 matnni tasvir ustiga qo'yish uchun keng qo'llaniladi. Fon tasviri birinchi joylashtiriladi, so'ngra matn Modifier.align bilan fon ustiga joylashtiriladi.
@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.
@Composable
fun LoadingOverlay() {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator(
modifier = Modifier.size(48.dp)
)
}
}
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.
Tez-tez beriladigan savollar
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.
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.
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.
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 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
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.