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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন