Compose-এ, আপনি কম্পোজেবলের লুক ও ফিল পরিবর্তন করতে একাধিক মডিফায়ার একসাথে চেইন করতে পারেন। এই মডিফায়ার চেন কম্পোজেবলে পাস করা কনস্ট্রেন-এর উপর প্রভাব ফেলতে পারে, যা প্রস্থ ও উচ্চতার সীমা নির্ধারণ করে।
এই পৃষ্ঠায় বর্ণনা করা হয়েছে যে কীভাবে চেইনড মডিফায়ার কনস্ট্রেন্টকে প্রভাবিত করে এবং এর ফলে কম্পোজেবলের পরিমাপ ও প্লেসমেন্টকে প্রভাবিত করে।
UI ট্রিতে মডিফায়ার
মডিফায়ারগুলি কীভাবে একে অপরকে প্রভাবিত করে তা বোঝার জন্য, কম্পোজিশন ফেজে তৈরি হওয়া UI ট্রিতে সেগুলি কীভাবে দেখানো হয় তা ভিজ্যুয়ালাইজ করা সহায়ক। আরও তথ্যের জন্য, কম্পোজিশন বিভাগ দেখুন।
UI ট্রিতে, আপনি লেআউট নোডের জন্য মডিফায়ারকে র্যাপার নোড হিসেবে দেখতে পারেন:
কম্পোজেবলে একাধিক মডিফায়ার যোগ করলে মডিফায়ারের একটি চেইন তৈরি হয়। আপনি
একাধিক মডিফায়ার চেইন করলে, প্রতিটি মডিফায়ার নোড চেইনের বাকি অংশ
এবং লেআউট নোডকে র্যাপ করে। যেমন, আপনি যখন একটি clip এবং একটি
size মডিফায়ারকে চেইন করেন, তখন clip মডিফায়ার নোড size মডিফায়ার নোডকে র্যাপ করে,
যা পরে Image লেআউট নোডকে র্যাপ করে।
লেআউট ফেজে, অ্যালগরিদম যা ট্রি ওয়াক করে একই থাকে, তবে প্রতিটি মডিফায়ার নোডও ভিজিট করা হয়। এইভাবে, একটি মডিফায়ার সাইজ পরিবর্তন করতে পারে মডিফায়ার বা লেআউট নোডের প্রয়োজনীয়তা এবং প্লেসমেন্ট যা এটি মোড়ানো হয়।
২ নম্বর ছবিতে যেমন দেখানো হয়েছে, Image ও Text কম্পোজেবলের ইমপ্লিমেন্টেশন
নিজেদের মধ্যেই একটি লেআউট নোডকে র্যাপ করা মডিফায়ারের একটি চেইন নিয়ে গঠিত।
Row এবং Column-এর প্রয়োগ হল লেআউট নোড যা বর্ণনা করে যে কীভাবে
তাদের চাইল্ড লেআউট করতে হবে।
সারসংক্ষেপ করতে:
- মডিফায়ার একটি একক মডিফায়ার বা লেআউট নোড র্যাপ করে।
- লেআউট নোড একাধিক চাইল্ড নোড লেআউট করতে পারে।
নিম্নলিখিত বিভাগগুলি বর্ণনা করে যে কীভাবে এই মানসিক মডেলটি মডিফায়ার চেইনিং সম্পর্কে যুক্তি দিতে ব্যবহার করতে হয় এবং কীভাবে এটি কম্পোজেবলের আকারকে প্রভাবিত করে।
লেআউট ফেজে সীমাবদ্ধতা
লেআউট ফেজ প্রতিটি লেআউট নোডের প্রস্থ, উচ্চতা এবং x, y স্থানাঙ্ক খুঁজে পেতে তিন-ধাপের অ্যালগরিদম অনুসরণ করে:
- চিলড্রেন পরিমাপ করা: কোনও নোড তার চিলড্রেনকে পরিমাপ করে, যদি থাকে।
- নিজস্ব সাইজ নির্ধারণ করা: সেই পরিমাপের উপর ভিত্তি করে, একটি নোড তার নিজস্ব সাইজ নির্ধারণ করে।
- চাইল্ড নোড প্লেস করা: প্রতিটি চাইল্ড নোডকে নোডের নিজস্ব অবস্থানের সাপেক্ষে প্লেস করা হয়।
Constraints অ্যালগরিদমের প্রথম দুটি ধাপে নোডের সঠিক সাইজ খুঁজে পেতে সাহায্য করে। কনস্ট্রেইন্ট কোনও নোডের প্রস্থ ও উচ্চতার সর্বনিম্ন ও সর্বোচ্চ সীমা
নির্ধারণ করে। নোড যখন তার সাইজ নির্ধারণ করে, তখন তার পরিমাপ করা সাইজ
এই সাইজ রেঞ্জের মধ্যে হওয়া উচিত।
বাধার ধরন
নিম্নলিখিতগুলির মধ্যে যেকোনও একটি সীমাবদ্ধতা হতে পারে:
- বাউন্ডেড: নোডের সর্বাধিক ও সর্বনিম্ন প্রস্থ ও উচ্চতা আছে।
- আনবাউন্ডেড: নোডটি কোনও সাইজে সীমাবদ্ধ নয়। সর্বাধিক প্রস্থ এবং উচ্চতার সীমা অসীম সেট করা আছে।
- নির্দিষ্ট: নোডকে নির্দিষ্ট সাইজ সংক্রান্ত প্রয়োজনীয়তা মেনে চলতে বলা হয়। সর্বনিম্ন এবং সর্বোচ্চ সীমা একই ভ্যালুতে সেট করা হয়েছে।
- কম্বিনেশন: নোডটি পূর্ববর্তী কনস্ট্রেন্ট ধরনের কম্বিনেশন অনুসরণ করে। যেমন, কোনও কনস্ট্রেন্ট প্রস্থকে সীমাবদ্ধ করতে পারে, যেখানে সর্বোচ্চ উচ্চতা সীমাবদ্ধ নাও হতে পারে অথবা সঠিক প্রস্থ সেট করতে পারে, যেখানে উচ্চতা সীমাবদ্ধ হতে পারে।
পরবর্তী বিভাগে বর্ণনা করা হয়েছে যে কীভাবে এই সীমাবদ্ধতাগুলি পেরেন্ট থেকে চাইল্ডে পাস করা হয়।
কীভাবে অভিভাবক থেকে সন্তানের কাছে সীমাবদ্ধতা পাস করা হয়
লেআউট ফেজে কনস্ট্রেন্ট-এ বর্ণিত অ্যালগরিদমের প্রথম ধাপে, UI ট্রিতে কনস্ট্রেন্ট পেরেন্ট থেকে চাইল্ডে পাস করা হয়।
কোনও পেরেন্ট নোড তার চাইল্ড নোড পরিমাপ করার সময়, প্রতিটি চাইল্ড নোডকে এই সীমাবদ্ধতা প্রদান করে যাতে তারা জানতে পারে যে তাদের কতটা বড় বা ছোট হওয়ার অনুমতি দেওয়া হয়েছে। তারপর, এটি নিজের সাইজ নির্ধারণ করার সময়, নিজের পেরেন্ট থেকে পাওয়া সীমাবদ্ধতাও মেনে চলে।
এক নজরে, অ্যালগরিদম এইভাবে কাজ করে:
- UI ট্রির রুট নোড, এটি আসলে কতটা জায়গা নিতে চায় তা নির্ধারণ করতে, এর চাইল্ড নোড পরিমাপ করে এবং একই সীমাবদ্ধতা তার প্রথম চাইল্ড নোডে ফরওয়ার্ড করে।
- চাইল্ড যদি এমন মডিফায়ার হয় যা পরিমাপকে প্রভাবিত করে না, তাহলে এটি পরবর্তী মডিফায়ারে কনস্ট্রেন্ট ফরওয়ার্ড করে। পরিমাপকে প্রভাবিত করে এমন মডিফায়ারে না পৌঁছানো পর্যন্ত কনস্ট্রেনগুলি মডিফায়ার চেনে যেমন আছে তেমনভাবে পাস করা হয়। সেই অনুযায়ী কনস্ট্রেনগুলি আবার সাইজ করা হয়।
- কোনও চাইল্ড নোড নেই এমন নোডে (যাকে "লিফ নোড" বলা হয়) পৌঁছালে, এটি পাস করা সীমাবদ্ধতার উপর ভিত্তি করে এর সাইজ নির্ধারণ করে এবং এই সমাধান করা সাইজটি এর পেরেন্ট নোডে ফিরিয়ে দেয়।
- পেরেন্ট এই চাইল্ডের পরিমাপের উপর ভিত্তি করে তার সীমাবদ্ধতাগুলি মানিয়ে নেয় এবং এই অ্যাডজাস্ট করা সীমাবদ্ধতার সাথে তার পরবর্তী চাইল্ডকে কল করে।
- কোনও পেরেন্ট নোডের সব চাইল্ড নোড পরিমাপ করা হয়ে গেলে, পেরেন্ট নোড নিজের সাইজ নির্ধারণ করে এবং তার পেরেন্ট নোডকে তা জানায়।
- এইভাবে, পুরো ট্রি ডেপথ-ফার্স্ট পদ্ধতিতে ট্রাভার্স করা হয়। অবশেষে, সব নোড তাদের সাইজ নির্ধারণ করে এবং পরিমাপের ধাপটি সম্পূর্ণ হয়।
বিস্তারিত উদাহরণের জন্য, কনস্ট্রেন্ট ও মডিফায়ার অর্ডার ভিডিও দেখুন।
মডিফায়ার যা সীমাবদ্ধতাকে প্রভাবিত করে
আপনি আগের বিভাগে জেনেছেন যে কিছু মডিফায়ার কনস্ট্রেন্ট সাইজকে প্রভাবিত করতে পারে। নিম্নলিখিত বিভাগে নির্দিষ্ট মডিফায়ার সম্পর্কে বর্ণনা করা হয়েছে যা সীমাবদ্ধতাকে প্রভাবিত করে।
size মডিফায়ার
size মডিফায়ার কন্টেন্টের পছন্দের সাইজ ঘোষণা করে।
যেমন, নিম্নলিখিত UI ট্রি 300dp
বাই 200dp কন্টেনারে রেন্ডার করা উচিত। সীমাবদ্ধতাগুলি বাউন্ডেড, যা 100dp এবং
300dp-এর মধ্যে প্রস্থ এবং 100dp এবং 200dp-এর মধ্যে উচ্চতার অনুমতি দেয়:
size মডিফায়ার ইনকামিং কনস্ট্রেন্টকে অ্যাডাপ্ট করে যাতে এটিতে পাস করা ভ্যালুর সাথে ম্যাচ করে।
এই উদাহরণে, ভ্যালু হল 150dp:
size মডিফায়ার কনস্ট্রেন্টকে 150dp-এ অ্যাডজাস্ট করছে।প্রস্থ এবং উচ্চতা যদি ক্ষুদ্রতম সীমাবদ্ধতার সীমার চেয়ে ছোট হয়, বা বৃহত্তম সীমাবদ্ধতার সীমার চেয়ে বড়, মডিফায়ারটি পাস করা ম্যাচের সাথে মেলে সীমাবদ্ধতা যতটা ঘনিষ্ঠভাবে পারে এখনও পাস করা সীমাবদ্ধতা মেনে চলে এ:
size মডিফায়ার যতটা সম্ভব
পাস করা কনস্ট্রেন্ট মেনে চলে।মনে রাখবেন, একাধিক size মডিফায়ার চেইন করা কাজ করে না। প্রথম size
মডিফায়ার ন্যূনতম ও সর্বাধিক সীমাবদ্ধতা, দুটিকেই একটি নির্দিষ্ট ভ্যালুতে সেট করে। এমনকি
দ্বিতীয় সাইজ মডিফায়ার ছোট বা বড় সাইজের অনুরোধ করলেও, এটি পাস করা সঠিক সীমার
মধ্যে থাকতে হবে, যাতে এটি সেইসব ভ্যালু ওভাররাইড না করে:
size মডিফায়ারের একটি চেইন, যেখানে দ্বিতীয় ভ্যালু (50dp)
প্রথম ভ্যালুকে (100dp) ওভাররাইড করে না।requiredSize মডিফায়ার
আপনার নোডকে ইনকামিং কনস্ট্রেন্ট ওভাররাইড করতে হলে, size-এর পরিবর্তে requiredSize মডিফায়ার ব্যবহার করুন। requiredSize মডিফায়ার ইনকামিং কনস্ট্রেন্ট
পরিবর্তন করে এবং আপনার উল্লেখ করা সাইজ সঠিক বাউন্ড হিসেবে পাস করে।
আপনার পাস করা সাইজ ইনকামিং কনস্ট্রেন্টের বাইরে হলে, ট্রি-তে সাইজ পাস করার সময় নোড এমন একটি সাইজ রিপোর্ট করে যা সেগুলির সাথে মানানসই হয় এবং এর কন্টেন্ট প্রতিটি অক্ষের সেই স্পেসে কেন্দ্রীভূত হয় যেখানে দুটি সাইজ আলাদা হয়। কন্টেন্ট সীমাবদ্ধতার
চেয়ে বড় হলে তা সীমাবদ্ধতা ছাড়িয়ে যায়। ১১ নম্বর ছবিতে, requiredSize(50)-এর সাইজ
100dp-এর থেকে ছোট, যা size-এর মধ্যে পাস করে, তাই 50dp কন্টেন্ট
100dp স্পেসের কেন্দ্রে থাকে:
requiredSize মডিফায়ার size মডিফায়ার থেকে আসা সীমাবদ্ধতা ওভাররাইড করছে।width এবং height মডিফায়ার
size মডিফায়ার কনস্ট্রেন্টের প্রস্থ ও উচ্চতা, দুটির সাথেই মানিয়ে নেয়। width
মডিফায়ারের সাহায্যে, আপনি নির্দিষ্ট প্রস্থ সেট করতে পারবেন কিন্তু উচ্চতা সেট না করলেও চলবে।
একইভাবে, height মডিফায়ার ব্যবহার করে আপনি নির্দিষ্ট উচ্চতা সেট করতে পারবেন, তবে প্রস্থ
অনির্ধারিত রাখতে পারবেন:
width মডিফায়ার এবং height মডিফায়ার যথাক্রমে একটি নির্দিষ্ট প্রস্থ
এবং উচ্চতা সেট করে।ইনকামিং কনস্ট্রেন্ট ওভাররাইড করে এমন প্রস্থ বা উচ্চতা সেট করতে,
requiredWidth বা requiredHeight ব্যবহার করুন। requiredSize-এর মতো, প্রতিটি
ইনকামিং কনস্ট্রেন্টকে প্রতিস্থাপন করে, তবে শুধুমাত্র তার নিজস্ব অক্ষে: requiredWidth
ইনকামিং উচ্চতা কনস্ট্রেন্ট রাখে এবং requiredHeight ইনকামিং
প্রস্থ কনস্ট্রেন্ট রাখে।
sizeIn মডিফায়ার
sizeIn মডিফায়ার আপনাকে ইনকামিং কনস্ট্রেন্টের মধ্যে প্রস্থ ও উচ্চতার জন্য ন্যূনতম ও সর্বাধিক কনস্ট্রেন্ট সেট করতে দেয়: যেখানে ইনকামিং কনস্ট্রেন্ট আরও কঠোর, সেখানে সেগুলিই প্রাধান্য পায়। সীমাবদ্ধতার উপর আরও সূক্ষ্ম নিয়ন্ত্রণ পেতে চাইলে,
sizeIn মডিফায়ার ব্যবহার করুন। widthIn এবং heightIn মডিফায়ার একটি অক্ষের উপর একই কাজ করে এবং অন্য অক্ষের সীমাবদ্ধতা অপরিবর্তিত রাখে। প্রতিটি
সর্বনিম্ন, সর্বাধিক অথবা দুটিই নেয়।
sizeIn মডিফায়ার minWidth, maxWidth, minHeight এবং
maxHeight সেট সহ।ইনকামিং কনস্ট্রেন্ট ওভাররাইড করে এমন রেঞ্জ সেট করতে, একটি অক্ষের জন্য
requiredSizeIn অথবা requiredWidthIn এবং requiredHeightIn
ব্যবহার করুন। requiredSize যেভাবে size-এর সাথে সম্পর্কিত,
sizeIn, widthIn ও heightIn-এর সাথেও সেভাবে সম্পর্কিত।
উদাহরণ
এই বিভাগে চেইনড মডিফায়ার সহ একাধিক কোড স্নিপেটের আউটপুট দেখানো ও ব্যাখ্যা করা হয়েছে।
Image( painterResource(R.drawable.hero), contentDescription = null, Modifier .fillMaxSize() .size(50.dp) )
এই স্নিপেট নিম্নলিখিত আউটপুট তৈরি করে:
Image মডিফায়ার চেনের কারণে
সর্বাধিক সাইজ পূরণ করে।fillMaxSizeমডিফায়ার কনস্ট্রেন্ট পরিবর্তন করে সর্বনিম্ন প্রস্থ ও উচ্চতা উভয়কেই সর্বাধিক ভ্যালুতে সেট করে — প্রস্থে300dpএবং উচ্চতায়200dp।sizeমডিফায়ার50dpসাইজ ব্যবহার করতে চাইলেও, এটিকে এখনও ইনকামিং ন্যূনতম সীমাবদ্ধতা মেনে চলতে হবে। তাইsizeমডিফায়ার300-এর সঠিক সীমাবদ্ধতা200-এর মাধ্যমে আউটপুট হিসেবে দেখাবে, যাsizeমডিফায়ারে প্রদান করা ভ্যালুকে উপেক্ষা করবে।Imageএই সীমা অনুসরণ করে এবং300x200সাইজ রিপোর্ট করে, যা ট্রি-এর একদম উপর পর্যন্ত পাস করা হয়।
Image( painterResource(R.drawable.hero), contentDescription = null, Modifier .fillMaxSize() .wrapContentSize() .size(50.dp) )
এই স্নিপেট নিম্নলিখিত আউটপুট তৈরি করে:
Image মাঝখানে আছে এবং সাইজ
50dp করা হয়েছে।fillMaxSizeমডিফায়ার, সর্বনিম্ন প্রস্থ ও উচ্চতা, দুটিকেই সর্বাধিক ভ্যালুতে সেট করার জন্য কনস্ট্রেন্ট অ্যাডাপ্ট করে — প্রস্থে300dpএবং উচ্চতায়200dp।wrapContentSizeমডিফায়ার ন্যূনতম সীমাবদ্ধতা রিসেট করে। তাই,fillMaxSize-এর ফলে নির্দিষ্ট সীমাবদ্ধতা তৈরি হলেও,wrapContentSizeএটি রিসেট করে সীমাবদ্ধ কনস্ট্রেনে ফিরিয়ে আনে। নিম্নলিখিত নোড এখন আবার পুরো স্পেস নিতে পারে অথবা পুরো স্পেসের থেকে ছোট হতে পারে।sizeমডিফায়ার50-এর ন্যূনতম ও সর্বাধিক সীমার মধ্যে সীমাবদ্ধতা সেট করে।Image-এর সাইজ50বাই50-এ সমাধান করা হয় এবংsizeমডিফায়ার সেটি ফরওয়ার্ড করে।wrapContentSizeমডিফায়ারের একটি বিশেষ প্রপার্টি আছে। এটি তার চাইল্ডকে নেয় এবং উপলভ্য ন্যূনতম বাউন্ডের কেন্দ্রে রাখে যা এতে পাস করা হয়েছে। তাই এটি পেরেন্টকে যে সাইজ জানায় তা এতে পাস করা ন্যূনতম সীমার সমান হয়।
By combining just three modifiers, you can define a size for the composable and center it in its parent.
Image( painterResource(R.drawable.hero), contentDescription = null, Modifier .clip(CircleShape) .padding(10.dp) .size(100.dp) )
এই স্নিপেট নিম্নলিখিত আউটপুট তৈরি করে:
clipমডিফায়ার কনস্ট্রেন্ট পরিবর্তন করে না।paddingমডিফায়ার সর্বাধিক সীমাবদ্ধতা কমায়।sizeমডিফায়ার সব সীমাবদ্ধতা100dp-এ সেট করে।Imageসেইসব সীমাবদ্ধতা মেনে চলে এবং100dpবাই100dpসাইজ রিপোর্ট করে।paddingমডিফায়ারImage-এর মাধ্যমে রিপোর্ট করা সাইজের সব দিকে10dpযোগ করে, তাই প্যাডিং সহ লেআউট120dp-এর প্রস্থ ও উচ্চতা রিপোর্ট করে।- এখন, ড্রয়িং ফেজে,
clipমডিফায়ার120dpবাই120dpক্যানভাসে কাজ করে। এটি সেই সাইজের একটি বৃত্তাকার মাস্ক তৈরি করে। paddingমডিফায়ার তারপর সব দিকে10dpদ্বারা এর কন্টেন্ট ইনসেট করে, যাImage-এর জন্য ক্যানভাসের সাইজ কমিয়ে100dpবাই100dpকরে দেয়।Imageসেই ছোট ক্যানভাসে আঁকা হয়।120dp-এর আসল সার্কেলের উপর ভিত্তি করে ছবিটি ক্লিপ করা হয়েছে, তাই আউটপুটটি একটি নন-রাউন্ড ফলাফল।
পরবর্তী তিনটি স্নিপেট একই 300dp
বাই 200dp কন্টেনারে ব্যাকগ্রাউন্ড রঙ সহ একটি Box রাখে।
Box( modifier = Modifier .requiredWidth(400.dp) .height(100.dp) .background(Color(0xFF3DDC84)) )
এই স্নিপেট নিম্নলিখিত আউটপুট তৈরি করে:
requiredWidth(400.dp)-এর সাথে,
Box 300dp কন্টেনারের প্রতিটি সাইডের
50dp পরে প্রসারিত হয়।requiredWidthমডিফায়ার ইনকামিং প্রস্থের সীমাবদ্ধতা400dp-এর সঠিক সীমানা দিয়ে প্রতিস্থাপন করে। এটি ইনকামিং উচ্চতার সীমাবদ্ধতা,0থেকে200dpপর্যন্ত বজায় রাখে।heightমডিফায়ার উচ্চতা100dp-এ সেট করে, যা উচ্চতার সীমাবদ্ধতার সাথে মানানসই।Box-এর পরিমাপ হল400dpবাই100dp। এই প্রস্থ কন্টেনারের অনুমোদিত300dp-এর চেয়ে বেশি, তাইrequiredWidthতার পেরেন্টকে300dpপ্রস্থের কথা জানায় এবং সেই স্পেসে তার কন্টেন্টকে সেন্টারে রাখে:Boxকন্টেনারের প্রতিটি সাইডের50dp-এর বাইরে প্রসারিত হয়।
Box( modifier = Modifier .widthIn(min = 100.dp, max = 400.dp) .heightIn(max = 100.dp) .fillMaxSize() .background(Color(0xFF3DDC84)) )
এই স্নিপেট নিম্নলিখিত আউটপুট তৈরি করে:
widthIn-এর সাথে, Box
300dp-কে 100dp দিয়ে পরিমাপ করে এবং কন্টেনারের
ভিতরে থাকে।widthInমডিফায়ার100dpএবং400dp-এর মধ্যে প্রস্থের জন্য জিজ্ঞাসা করে। ইনকামিং সর্বাধিক প্রস্থ হল300dp, তাই প্রস্থের সীমাবদ্ধতা100dpথেকে300dpহয়ে যায়।heightInমডিফায়ার100dp-এর সর্বাধিক উচ্চতা সেট করে, তাই উচ্চতার বাধ্যবাধকতা0থেকে100dpহয়ে যায়।fillMaxSizeমডিফায়ার ন্যূনতম প্রস্থ ও উচ্চতা সর্বাধিকের সমান করে দেয়, তাইBoxহল300dpবাই100dpএবং কন্টেনারের ভিতরে থাকে।
Box( modifier = Modifier .requiredSizeIn(minWidth = 100.dp, maxWidth = 400.dp, maxHeight = 100.dp) .fillMaxSize() .background(Color(0xFF3DDC84)) )
এই স্নিপেট নিম্নলিখিত আউটপুট তৈরি করে:
requiredSizeIn-এর সাথে,
Box 400dp-কে 100dp দ্বারা পরিমাপ করে এবং কন্টেনারের প্রতিটি পাশে
50dp পর্যন্ত প্রসারিত করে, যা চিত্র
১৭-এর মতো একই ফলাফল দেয়।requiredSizeInমডিফায়ার ইনকামিং কনস্ট্রেন্টকে100dpথেকে400dpপ্রস্থ এবং0থেকে100dpউচ্চতা দিয়ে রিপ্লেস করে। ন্যূনতম উচ্চতা সেট করা নেই, তাই এটি0-এর ইনকামিং ন্যূনতম উচ্চতা বজায় রাখে।fillMaxSizeমডিফায়ার ন্যূনতম প্রস্থ ও উচ্চতা সর্বাধিকের সমান করে দেয়, তাইBox-এর পরিমাপ400dpx100dpহয়।requiredWidthউদাহরণের মতো, প্রস্থ কন্টেনারের অনুমোদিত প্রস্থের চেয়ে বেশি, তাইBoxমাঝখানে থাকে এবং প্রতিটি পাশে50dpপর্যন্ত প্রসারিত হয়।
একই রেঞ্জে, widthIn এবং heightIn, Box-কে কন্টেনারের
ভিতরে রাখে এবং requiredSizeIn রাখে না।