Box Jetpack Compose میں ایک composable فنکشن ہے جو چائلڈ عناصر کو ایک دوسرے کے اوپر تہوں میں رکھنے کے لیے ہے۔ Row اور Column کے برعکس، Box عناصر کو ایک ہی علاقے میں ڈھیر کرتا ہے، جس سے ساخت، بیجز اور حسب ضرورت اشارے بنائے جا سکتے ہیں۔ Google Android Documentation, 2025 کے مطابق، Box Compose کے تین بنیادی کنٹینرز میں سے ایک ہے اور Modifier.align اور Modifier.zIndex کے ساتھ لچکدار پرت کا انتظام فراہم کرتا ہے۔
اہم نکات
Box ایک composable فنکشن ہے جو چائلڈ عناصر کو ایک ہی علاقے میں رکھتا ہے، انہیں ایک دوسرے کے اوپر ڈھیر کرتا ہے۔ پہلا چائلڈ عنصر نیچے کھینچا جاتا ہے، آخری اوپر۔ ڈیفالٹ طور پر، Box سب سے بڑے چائلڈ عنصر کے سائز میں ڈھل جاتا ہے۔
Row اور Column کے برعکس، Box عناصر کو ترتیب وار ترتیب نہیں دیتا — تمام چائلڈ عناصر ایک ہی علاقہ گھیرتے ہیں اور ایک دوسرے کو اوورلیپ کر سکتے ہیں۔ یہ Box کو انٹرفیس کی تہیں بنانے کے لیے ناگزیر بناتا ہے۔
Box کا سائز اس اصول سے متعین ہوتا ہے: اگر کسی چائلڈ عنصر کا مقررہ سائز نہیں ہے، تو Box کم سے کم سائز میں سکڑ جاتا ہے۔ اگر کم از کم ایک چائلڈ عنصر میں Modifier.fillMaxSize ہے، تو Box زیادہ سے زیادہ تک پھیل جاتا ہے۔
Android Developers Blog, 2024 کے مطابق، Box ان معاملات کے لیے Compose میں سب سے موثر کنٹینر ہے جہاں عناصر کو ترتیب وار ترتیب کی ضرورت نہیں ہوتی۔ Box Row اور Column کے برعکس، پوزیشننگ کے لیے اضافی پیمائش نہیں کرتا۔
Box پیرامیٹر modifier، contentAlignment اور propagateMinConstraints قبول کرتا ہے۔ تمام چائلڈ عناصر content بلاک میں منتقل کیے جاتے ہیں، جہاں ہر ایک کے اپنے موڈیفائر ہو سکتے ہیں۔
@Composable
fun BoxExample() {
Box(
modifier = Modifier.size(200.dp),
contentAlignment = Alignment.Center
) {
Box(
modifier = Modifier.fillMaxSize().background(Color.Blue)
)
Text(
text = "ہیلو",
color = Color.White
)
}
}
contentAlignment Box کا ایک پیرامیٹر ہے جو تمام چائلڈ عناصر کے لیے ڈیفالٹ سیدھ متعین کرتا ہے۔ اگر متعین نہ کیا جائے، تو Alignment.TopStart استعمال ہوتا ہے — عناصر کنٹینر کے اوپری بائیں کونے میں رکھے جاتے ہیں۔
Modifier.align contentAlignment سے آزادانہ طور پر کسی مخصوص چائلڈ عنصر کی سیدھ کو اوور رائڈ کرنے کی اجازت دیتا ہے۔ مثال کے طور پر، Alignment.Center والا Box Modifier.align(Alignment.BottomEnd) والا عنصر رکھ سکتا ہے جو نیچے دائیں کونے میں جم جائے گا۔
Material Design Guidelines, 2025 کے مطابق، Modifier.align پس منظر کی تصاویر پر بیجز اور آئیکن رکھنے کے لیے مفید ہے۔ یہ Box کے تمام مواد کے لیے عمومی سیدھ متعین کرنے اور انفرادی عناصر کے لیے اسے اوور رائڈ کرنے کی اجازت دیتا ہے۔
| قدر | Box میں مقام | استعمال کی مثال |
|---|---|---|
| TopStart | اوپری بایاں کونا | کارڈ کے کونے میں آئیکن |
| TopCenter | اوپر مرکز | تصویر کے اوپر عنوان |
| Center | کنٹینر کا مرکز | پس منظر پر مرکز میں متن |
| BottomEnd | نیچے دایاں کونا | آئیکن پر نوٹیفکیشن شمار |
| BottomCenter | نیچے مرکز | تصویر کے نیچے کیپشن |
اس مثال میں، Box میں ایک پس منظر کی تصویر اور نیچے دائیں کونے میں ایک بیج ہے۔ Modifier.align(BottomEnd) بیج کو Box کے contentAlignment سے آزادانہ طور پر رکھتا ہے۔
@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 کے اندر عناصر کی کھینچنے کی ترتیب کو کنٹرول کرتا ہے۔ ڈیفالٹ طور پر، عناصر اعلان کی ترتیب میں کھینچے جاتے ہیں — پہلا عنصر نیچے، آخری اوپر۔ zIndex اس ترتیب کو اوور رائڈ کرتا ہے۔
zIndex 2.0f والا عنصر zIndex 1.0f والے عنصر کے اوپر کھینچا جاتا ہے، کوڈ میں ان کی ترتیب سے آزاد۔ منفی zIndex اقدار عنصر کو دوسروں کے نیچے رکھتی ہیں۔ Android Developers, 2024 کے مطابق، zIndex صرف کھینچنے کی ترتیب کو متاثر کرتا ہے، ٹچ ایونٹ ہینڈلنگ کو نہیں۔
zIndex خاص طور پر اینیمیشنز اور گھسیٹنے والے اجزاء میں مفید ہے، جہاں عنصر کو عارضی طور پر دوسروں کے اوپر اٹھنے کی ضرورت ہوتی ہے۔ مثال کے طور پر، کارڈ گھسیٹتے وقت، اس کا zIndex بڑھ جاتا ہے تاکہ پڑوسی عناصر اسے ڈھانپ نہ سکیں۔
@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 تصاویر پر متن چڑھانے کے لیے بڑے پیمانے پر استعمال ہوتا ہے۔ پس منظر کی تصویر پہلے رکھی جاتی ہے، پھر پس منظر پر پوزیشننگ کے لیے Modifier.align کے ساتھ متن رکھا جاتا ہے۔
@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 = "عنوان",
color = Color.White,
modifier = Modifier.align(Alignment.BottomStart)
.padding(16.dp)
)
}
}
دوسری مثال لوڈنگ انڈیکیٹر بنانے کے لیے Box ہے۔ Box پوری اسکرین کے علاقے کو گھیرتا ہے، اور CircularProgressIndicator contentAlignment کے ذریعے مرکز میں ہوتا ہے۔
@Composable
fun LoadingOverlay() {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
CircularProgressIndicator(
modifier = Modifier.size(48.dp)
)
}
}
Box ڈیفالٹ طور پر اپنے مواد کے سائز میں ڈھل جاتا ہے۔ اگر چائلڈ عناصر کے مختلف سائز ہوں، تو Box سب سے بڑے عنصر کا سائز لیتا ہے۔ جب کوئی چائلڈ عنصر نہ ہو، تو Box کم سے کم سائز میں سکڑ جاتا ہے۔
Modifier.clipToBounds چائلڈ عناصر کی رینڈرنگ کو Box کی حدود تک محدود کرتا ہے۔ اس موڈیفائر کے بغیر، چائلڈ عناصر Box سے باہر پھیل سکتے ہیں۔ Material Design Guidelines, 2025 کے مطابق، Box کے اندر Modifier.scale یا Modifier.graphicsLayer استعمال کرتے وقت clipToBounds لازمی ہے۔
propagateMinConstraints Box کا ایک پیرامیٹر ہے جو کم سے کم سائز کی پابندیوں کو چائلڈ عناصر تک پہنچاتا ہے۔ اگر true پر سیٹ کیا جائے، تو چائلڈ عناصر Modifier.size یا Modifier.constrain کے ذریعے Box کے لیے مقرر کردہ کم سے کم سائز سے چھوٹے نہیں ہو سکتے۔
اکثر پوچھے گئے سوالات
Box عناصر کو ایک دوسرے کے اوپر ڈھیر کرتا ہے، جبکہ Row اور Column انہیں ترتیب وار ترتیب دیتے ہیں۔ Box تہوں اور چڑھانے کے لیے موزوں ہے، Row افقی قطاروں کے لیے، اور Column عمودی فہرستوں کے لیے۔
کسی مخصوص چائلڈ عنصر کے لیے Modifier.align استعمال کریں۔ یہ موڈیفائر پورے Box کے لیے سیٹ کردہ contentAlignment کو اوور رائڈ کرتا ہے۔ مثال کے طور پر، Modifier.align(Alignment.BottomEnd) عنصر کو نیچے دائیں کونے میں جما دیتا ہے۔
Modifier.size اور Modifier.background کے ساتھ ایک Box بنائیں، اور contentAlignment کو Alignment.Center پر سیٹ کریں۔ Box کے اندر کا متن اضافی موڈیفائر کے بغیر خود بخود مرکز میں آ جائے گا۔
propagateMinConstraints Box کی کم سے کم سائز کی پابندیوں کو چائلڈ عناصر تک پہنچاتا ہے۔ true پر سیٹ کرنے پر، چائلڈ عناصر Modifier.size یا Modifier.constrain کے ذریعے Box کے لیے مقرر کردہ کم سے کم سائز سے چھوٹے نہیں ہو سکتے۔
Box میں عناصر کے اعلان کی ترتیب ان کی بصری ترتیب متعین کرتی ہے: پہلا عنصر نیچے، آخری اوپر۔ عین مطابق کنٹرول کے لیے Modifier.zIndex استعمال کریں — زیادہ قدر والا عنصر باقیوں کے اوپر کھینچا جاتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں