কম্পোজে, আপনি একটি কম্পোজেবলের চেহারা এবং অনুভূতি পরিবর্তন করতে একাধিক মডিফায়ারকে একসাথে চেইন করতে পারেন। এই সংশোধক চেইনগুলি কম্পোজেবলগুলিতে পাস করা সীমাবদ্ধতাগুলিকে প্রভাবিত করতে পারে, যা প্রস্থ এবং উচ্চতার সীমা নির্ধারণ করে।
এই পৃষ্ঠাটি বর্ণনা করে যে কীভাবে চেইনড মডিফায়ার সীমাবদ্ধতাগুলিকে প্রভাবিত করে এবং ফলস্বরূপ, কম্পোজেবলের পরিমাপ এবং স্থাপন করা হয়।
UI ট্রিতে সংশোধক
সংশোধকগুলি কীভাবে একে অপরকে প্রভাবিত করে তা বোঝার জন্য, UI ট্রিতে তারা কীভাবে উপস্থিত হয় তা কল্পনা করা সহায়ক, যা রচনা পর্যায়ে উত্পন্ন হয়। আরও তথ্যের জন্য, রচনা বিভাগটি দেখুন।
UI ট্রিতে, আপনি লেআউট নোডগুলির জন্য মোড়ক নোড হিসাবে পরিবর্তনকারীদের কল্পনা করতে পারেন:

একটি কম্পোজেবলে একাধিক মডিফায়ার যোগ করলে মডিফায়ারের একটি চেইন তৈরি হয়। আপনি যখন একাধিক মডিফায়ারকে চেইন করেন, তখন প্রতিটি মডিফায়ার নোড বাকি চেইন এবং লেআউট নোডকে এর মধ্যে মুড়ে দেয় । উদাহরণস্বরূপ, আপনি যখন একটি clip এবং একটি size পরিবর্তনকারীকে চেইন করেন, তখন clip সংশোধক নোডটি size পরিবর্তনকারী নোডকে মোড়ানো হয়, যা তারপরে Image লেআউট নোডটিকে মোড়ানো হয়।
লেআউট পর্বে, গাছের সাথে চলার অ্যালগরিদম একই থাকে, তবে প্রতিটি মডিফায়ার নোডও পরিদর্শন করা হয়। এইভাবে, একটি সংশোধক সংশোধক বা লেআউট নোডের আকারের প্রয়োজনীয়তা এবং স্থান নির্ধারণ করতে পারে যা এটি মোড়ানো হয়।
চিত্র 2-এ দেখানো হয়েছে, Image এবং Text কম্পোজেবলের বাস্তবায়নে একটি একক লেআউট নোড মোড়ানো মডিফায়ারের একটি চেইন থাকে।
Row এবং Column বাস্তবায়ন হল লেআউট নোড যা বর্ণনা করে কিভাবে তাদের বাচ্চাদের লেআউট করতে হয়।

সংক্ষিপ্ত করতে:
- সংশোধক একটি একক সংশোধক বা লেআউট নোড মোড়ানো।
- লেআউট নোড একাধিক চাইল্ড নোড লেআউট করতে পারে।
নিম্নোক্ত বিভাগগুলি বর্ণনা করে যে কীভাবে এই মানসিক মডেলটি মডিফায়ার চেইনিং সম্পর্কে যুক্তির জন্য ব্যবহার করতে হয় এবং কীভাবে এটি কম্পোজেবলের আকারকে প্রভাবিত করে।
লেআউট পর্বে সীমাবদ্ধতা
লেআউট ফেজ প্রতিটি লেআউট নোডের প্রস্থ, উচ্চতা এবং x, y স্থানাঙ্ক খুঁজে পেতে একটি তিন-পদক্ষেপ অ্যালগরিদম অনুসরণ করে:
- শিশুদের পরিমাপ করুন : একটি নোড তার শিশুদের পরিমাপ করে, যদি থাকে।
- নিজের আকার নির্ধারণ করুন : এই পরিমাপের উপর ভিত্তি করে, একটি নোড তার নিজের আকারের উপর সিদ্ধান্ত নেয়।
- শিশুদের রাখুন : প্রতিটি চাইল্ড নোড একটি নোডের নিজস্ব অবস্থানের সাপেক্ষে স্থাপন করা হয়।
Constraints অ্যালগরিদমের প্রথম দুটি ধাপে নোডের জন্য সঠিক মাপ খুঁজে পেতে সাহায্য করে। সীমাবদ্ধতা একটি নোডের প্রস্থ এবং উচ্চতার জন্য সর্বনিম্ন এবং সর্বোচ্চ সীমা নির্ধারণ করে। যখন নোড তার আকারের উপর সিদ্ধান্ত নেয়, তখন তার পরিমাপ করা আকার এই আকারের সীমার মধ্যে হওয়া উচিত।
সীমাবদ্ধতার প্রকার
একটি সীমাবদ্ধতা নিম্নলিখিতগুলির মধ্যে একটি হতে পারে:
- আবদ্ধ : নোডের সর্বোচ্চ এবং সর্বনিম্ন প্রস্থ এবং উচ্চতা রয়েছে।

- সীমাহীন : নোড কোন আকারে সীমাবদ্ধ নয়। সর্বাধিক প্রস্থ এবং উচ্চতা সীমা অসীম সেট করা হয়.

- সঠিক : নোডটিকে একটি সঠিক আকারের প্রয়োজনীয়তা অনুসরণ করতে বলা হয়। সর্বনিম্ন এবং সর্বোচ্চ সীমা একই মান সেট করা হয়.

- সংমিশ্রণ : নোডটি পূর্ববর্তী সীমাবদ্ধতার প্রকারের সংমিশ্রণ অনুসরণ করে। উদাহরণস্বরূপ, একটি সীমাবদ্ধতা একটি সীমাহীন সর্বাধিক উচ্চতার অনুমতি দেওয়ার সময় প্রস্থকে আবদ্ধ করতে পারে, বা একটি সঠিক প্রস্থ সেট করে তবে একটি আবদ্ধ উচ্চতা প্রদান করতে পারে।

পরবর্তী বিভাগে বর্ণনা করা হয়েছে কিভাবে এই সীমাবদ্ধতাগুলি একজন পিতামাতা থেকে একটি সন্তানের কাছে চলে যায়।
পিতামাতা থেকে সন্তানের কাছে কীভাবে সীমাবদ্ধতাগুলি প্রেরণ করা হয়
লেআউট পর্বে সীমাবদ্ধতায় বর্ণিত অ্যালগরিদমের প্রথম ধাপের সময়, UI ট্রিতে সীমাবদ্ধতাগুলি পিতামাতা থেকে সন্তানের কাছে পাঠানো হয়।
যখন একটি অভিভাবক নোড তার সন্তানদের পরিমাপ করে, তখন এটি প্রতিটি শিশুকে এই সীমাবদ্ধতাগুলি প্রদান করে যাতে তারা জানতে পারে যে তারা কত বড় বা ছোট হতে পারে। তারপর, যখন এটি নিজের আকার নির্ধারণ করে, তখন এটি তার নিজের পিতামাতার দ্বারা পাস করা সীমাবদ্ধতাগুলিও মেনে চলে।
একটি উচ্চ স্তরে, অ্যালগরিদম নিম্নলিখিত উপায়ে কাজ করে:
- এটি আসলে যে আকারটি দখল করতে চায় তা নির্ধারণ করতে, UI গাছের রুট নোড তার বাচ্চাদের পরিমাপ করে এবং একই সীমাবদ্ধতাগুলি তার প্রথম সন্তানের কাছে ফরোয়ার্ড করে।
- যদি শিশুটি এমন একটি সংশোধক হয় যা পরিমাপকে প্রভাবিত করে না, তবে এটি সীমাবদ্ধতাগুলিকে পরবর্তী সংশোধকের কাছে প্রেরণ করে। পরিমাপকে প্রভাবিত করে এমন একটি সংশোধক না পৌঁছালে সীমাবদ্ধতাগুলি সংশোধক শৃঙ্খলে যেমন-ই চলে যায়। সীমাবদ্ধতাগুলি তারপর সেই অনুযায়ী পুনরায় আকার দেওয়া হয়।
- একবার একটি নোড পৌঁছে গেলে যেখানে কোনও সন্তান নেই (একটি "লিফ নোড" হিসাবে উল্লেখ করা হয়), এটি পাস করা সীমাবদ্ধতার উপর ভিত্তি করে এর আকার নির্ধারণ করে এবং এই সমাধান করা আকারটি তার পিতামাতার কাছে ফেরত দেয়।
- পিতামাতা এই সন্তানের পরিমাপের উপর ভিত্তি করে তার সীমাবদ্ধতাগুলিকে মানিয়ে নেয় এবং এই সামঞ্জস্যপূর্ণ সীমাবদ্ধতার সাথে তার পরবর্তী সন্তানকে ডাকে।
- একবার অভিভাবকের সমস্ত সন্তান পরিমাপ করা হলে, অভিভাবক নোড তার নিজের আকারের উপর সিদ্ধান্ত নেয় এবং তার নিজের পিতামাতার সাথে যোগাযোগ করে।
- এইভাবে, পুরো গাছটি প্রথমে গভীরতা অতিক্রম করা হয়। অবশেষে, সমস্ত নোড তাদের আকারের উপর সিদ্ধান্ত নিয়েছে, এবং পরিমাপ পদক্ষেপ সম্পন্ন হয়েছে।
একটি গভীর উদাহরণের জন্য, সীমাবদ্ধতা এবং সংশোধনকারী অর্ডার ভিডিও দেখুন।
সংশোধক যা সীমাবদ্ধতাকে প্রভাবিত করে
আপনি পূর্ববর্তী বিভাগে শিখেছেন যে কিছু সংশোধক সীমাবদ্ধতার আকারকে প্রভাবিত করতে পারে। নিম্নলিখিত বিভাগগুলি নির্দিষ্ট সংশোধকদের বর্ণনা করে যা সীমাবদ্ধতাকে প্রভাবিত করে।
size পরিবর্তনকারী
size পরিবর্তনকারী সামগ্রীর পছন্দসই আকার ঘোষণা করে।
উদাহরণস্বরূপ, নিম্নলিখিত UI ট্রিটি 200dp দ্বারা 300dp এর একটি পাত্রে রেন্ডার করা উচিত। সীমাবদ্ধতাগুলি আবদ্ধ, 100dp এবং 300dp এর মধ্যে প্রস্থ এবং 100dp এবং 200dp মধ্যে উচ্চতাকে অনুমতি দেয়:

size সংশোধক আগত সীমাবদ্ধতাকে মানিয়ে নেয় যাতে এটিতে পাস করা মানটি মেলে। এই উদাহরণে, মান হল 150dp :

size সংশোধক 150dp এ সীমাবদ্ধতা সামঞ্জস্য করে।যদি প্রস্থ এবং উচ্চতা ক্ষুদ্রতম সীমাবদ্ধতার চেয়ে ছোট হয়, বা সবচেয়ে বড় সীমাবদ্ধতার চেয়ে বড় হয়, তাহলে সংশোধকটি পাস করা সীমাবদ্ধতাগুলির সাথে যতটা ঘনিষ্ঠভাবে মেলে এবং এখনও পাস করা সীমাবদ্ধতাগুলি মেনে চলে:

size সংশোধক যতটা সম্ভব ঘনিষ্ঠভাবে পাস করা সীমাবদ্ধতা মেনে চলে। মনে রাখবেন যে একাধিক size পরিবর্তনকারীকে চেইন করা কাজ করে না। প্রথম size সংশোধক একটি নির্দিষ্ট মানের সর্বনিম্ন এবং সর্বোচ্চ উভয় সীমাবদ্ধতা সেট করে। এমনকি যদি দ্বিতীয় আকারের সংশোধক একটি ছোট বা বড় আকারের অনুরোধ করে, তবুও এটিকে পাস করা সঠিক সীমাগুলি মেনে চলতে হবে, তাই এটি সেই মানগুলিকে ওভাররাইড করবে না:

size সংশোধকগুলির একটি চেইন, যেখানে দ্বিতীয় মানটি ( 50dp ) এ পাস করেছে প্রথম মান ( 100dp )টিকে ওভাররাইড করে না।requiredSize পরিবর্তনকারী
ইনকামিং সীমাবদ্ধতাগুলি ওভাররাইড করার জন্য আপনার নোডের প্রয়োজন হলে size পরিবর্তে requiredSize মডিফায়ার ব্যবহার করুন। requiredSize সাইজ সংশোধক ইনকামিং সীমাবদ্ধতাগুলি প্রতিস্থাপন করে এবং সঠিক সীমা হিসাবে আপনার নির্দিষ্ট করা আকারটি পাস করে।
যখন আকারটি গাছের ব্যাক আপ করা হয়, তখন চাইল্ড নোডটি উপলব্ধ স্থানে কেন্দ্রীভূত হবে:

requiredSize মডিফায়ার size মডিফায়ার থেকে ইনকামিং সীমাবদ্ধতা ওভাররাইড করে। width এবং height সংশোধক
size সংশোধক সীমাবদ্ধতার প্রস্থ এবং উচ্চতা উভয়কেই মানিয়ে নেয়। width সংশোধনকারীর সাহায্যে, আপনি একটি নির্দিষ্ট প্রস্থ সেট করতে পারেন তবে উচ্চতাটি অনিশ্চিত রেখে যান। একইভাবে, height পরিবর্তনকারীর সাথে, আপনি একটি নির্দিষ্ট উচ্চতা সেট করতে পারেন, তবে প্রস্থটি অনিশ্চিত রেখে দিন:

width সংশোধক এবং height সংশোধক যথাক্রমে একটি নির্দিষ্ট প্রস্থ এবং উচ্চতা নির্ধারণ করে। sizeIn মডিফায়ার
sizeIn মডিফায়ার আপনাকে প্রস্থ এবং উচ্চতার জন্য সঠিক ন্যূনতম এবং সর্বোচ্চ সীমাবদ্ধতা সেট করতে দেয়। sizeIn মডিফায়ার ব্যবহার করুন যদি আপনার সীমাবদ্ধতার উপর সূক্ষ্ম নিয়ন্ত্রণের প্রয়োজন হয়।

minWidth , maxWidth , minHeight , এবং maxHeight সেট সহ sizeIn মডিফায়ার।উদাহরণ
এই বিভাগটি চেইনড মডিফায়ার সহ বেশ কয়েকটি কোড স্নিপেট থেকে আউটপুট দেখায় এবং ব্যাখ্যা করে।
Image( painterResource(R.drawable.hero), contentDescription = null, Modifier .fillMaxSize() .size(50.dp) )
এই স্নিপেট নিম্নলিখিত আউটপুট উত্পাদন করে:

Image সর্বাধিক আকার পূরণ করে।-
fillMaxSizeসংশোধক সীমাবদ্ধতা পরিবর্তন করে সর্বনিম্ন প্রস্থ এবং উচ্চতা উভয়কেই সর্বোচ্চ মান নির্ধারণ করে — প্রস্থে300dpএবং উচ্চতায়200dp। - যদিও
sizeসংশোধক50dpএর আকার ব্যবহার করতে চায়, তবুও এটিকে আগত ন্যূনতম সীমাবদ্ধতাগুলি মেনে চলতে হবে। তাইsizeসংশোধকটি300দ্বারা200এর সঠিক সীমাবদ্ধতাও আউটপুট করবে, কার্যকরভাবেsizeসংশোধকটিতে প্রদত্ত মানটিকে উপেক্ষা করে। -
Imageএই সীমাগুলি অনুসরণ করে এবং300বাই200এর আকারের রিপোর্ট করে, যা গাছের উপরে চলে যায়।
Image( painterResource(R.drawable.hero), contentDescription = null, Modifier .fillMaxSize() .wrapContentSize() .size(50.dp) )
এই স্নিপেট নিম্নলিখিত আউটপুট উত্পাদন করে:

Image কেন্দ্রীভূত এবং আকার 50dp .-
fillMaxSizeমডিফায়ার ন্যূনতম প্রস্থ এবং উচ্চতা উভয়কেই সর্বাধিক মান - প্রস্থে300dpএবং উচ্চতায়200dpসেট করতে সীমাবদ্ধতাগুলিকে খাপ খায়। -
wrapContentSizeসংশোধক সর্বনিম্ন সীমাবদ্ধতা পুনরায় সেট করে। সুতরাং,fillMaxSizeফলে নির্দিষ্ট সীমাবদ্ধতা দেখা দিলে,wrapContentSizeএটিকে আবার সীমাবদ্ধ সীমাবদ্ধতায় পুনরায় সেট করে । নিম্নলিখিত নোডটি এখন আবার পুরো স্থান নিতে পারে, বা পুরো স্থানের চেয়ে ছোট হতে পারে। -
sizeসংশোধক সীমাবদ্ধতাগুলিকে সর্বনিম্ন এবং সর্বাধিক50সীমাতে সেট করে। -
Image50বাই50আকারে সমাধান করে এবংsizeপরিবর্তনকারী সেটিকে এগিয়ে দেয়। -
wrapContentSizeসংশোধকের একটি বিশেষ সম্পত্তি আছে। এটি তার সন্তানকে নিয়ে যায় এবং এটিকে পাস করা উপলব্ধ সর্বনিম্ন সীমার কেন্দ্রে রাখে । এটি তার পিতামাতার সাথে যে আকারে যোগাযোগ করে তা এইভাবে এটিতে প্রবেশ করা ন্যূনতম সীমার সমান।
মাত্র তিনটি সংশোধক একত্রিত করে, আপনি কম্পোজেবলের জন্য একটি আকার সংজ্ঞায়িত করতে পারেন এবং এটিকে এর প্যারেন্টে কেন্দ্র করতে পারেন।
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এর মূল বৃত্তের উপর ভিত্তি করে ক্লিপ করা হয়েছে, তাই আউটপুটটি একটি অ-গোলাকার ফলাফল।