লেআউট রিসোর্স

লেআউট রিসোর্স Activity-এ UI-এর আর্কিটেকচার বা UI-এর কম্পোনেন্ট সংজ্ঞায়িত করে।

ফাইলের লোকেশন:
res/layout/filename.xml
ফাইলের নাম রিসোর্স আইডি হিসেবে ব্যবহার করা হয়।
কম্পাইল করা রিসোর্স ডেটাটাইপ:
রিসোর্স পয়েন্টার থেকে View (বা সাবক্লাস) রিসোর্স
রিসোর্স রেফারেন্স:
Java-তে: R.layout.filename
XML-এ: @[package:]layout/filename
সিনট্যাক্স:
<?xml version="1.0" encoding="utf-8"?>
<ViewGroup
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@[+][package:]id/resource_name"
    android:layout_height=["dimension" | "match_parent" | "wrap_content"]
    android:layout_width=["dimension" | "match_parent" | "wrap_content"]
    [ViewGroup-specific attributes] >
    <View
        android:id="@[+][package:]id/resource_name"
        android:layout_height=["dimension" | "match_parent" | "wrap_content"]
        android:layout_width=["dimension" | "match_parent" | "wrap_content"]
        [View-specific attributes] >
        <requestFocus/>
    </View>
    <ViewGroup >
        <View />
    </ViewGroup>
    <include layout="@layout/layout_resource"/>
</ViewGroup>

মনে রাখবেন: রুট এলিমেন্টটি একটি ViewGroup, একটি View, অথবা একটি <merge> এলিমেন্ট হতে পারে, তবে শুধুমাত্র একটিই রুট এলিমেন্ট থাকতে পারে এবং এতে অবশ্যই xmlns:android অ্যাট্রিবিউট সহ android নেমস্পেস থাকতে হবে, যেমনটি পূর্ববর্তী সিনট্যাক্স উদাহরণে দেখানো হয়েছে।

এলিমেন্ট:
<ViewGroup>
অন্যান্য View এলিমেন্টের জন্য একটি কন্টেনার। অনেক ধরনের ViewGroup অবজেক্ট আছে এবং প্রতিটি অবজেক্ট আপনাকে বিভিন্ন উপায়ে চাইল্ড এলিমেন্টের লেআউট নির্দিষ্ট করতে দেয়। বিভিন্ন ধরনের ViewGroup অবজেক্টের মধ্যে LinearLayout, RelativeLayout ও FrameLayout অন্তর্ভুক্ত।

ViewGroup-এর কোনও ডেরিভেশন নেস্টেড ভিউ গ্রহণ করে বলে ধরে নেবেন না। কিছু ভিউ গ্রুপ AdapterView ক্লাসের ইমপ্লিমেন্টেশন, যা শুধুমাত্র Adapter থেকে এর চাইল্ড নির্ধারণ করে।

গুণাবলী:

android:id
রিসোর্স আইডি। এলিমেন্টের জন্য একটি অনন্য রিসোর্স নাম, যা আপনি আপনার অ্যাপ্লিকেশন থেকে ViewGroup-এর রেফারেন্স পেতে ব্যবহার করতে পারেন। আরও তথ্যের জন্য, android:id-এর ভ্যালু বিভাগ দেখুন।
android:layout_height
ডাইমেনশন বা কীওয়ার্ড। প্রয়োজনীয়। গ্রুপের উচ্চতা, ডাইমেনশন ভ্যালু (বা ডাইমেনশন রিসোর্স) বা কীওয়ার্ড ("match_parent" বা "wrap_content") হিসেবে। আরও তথ্যের জন্য, android:layout_height এবং android:layout_width-এর ভ্যালু বিভাগ দেখুন।
android:layout_width
ডাইমেনশন বা কীওয়ার্ড। প্রয়োজনীয়। গ্রুপের প্রস্থ, ডাইমেনশন ভ্যালু (বা ডাইমেনশন রিসোর্স) বা কীওয়ার্ড ("match_parent" বা "wrap_content") হিসেবে। আরও তথ্যের জন্য, android:layout_height এবং android:layout_width-এর ভ্যালু বিভাগ দেখুন।

ViewGroup মূল ক্লাস আরও অ্যাট্রিবিউট সাপোর্ট করে এবং ViewGroup-এর প্রতিটি ইমপ্লিমেন্টেশন আরও অনেক কিছু সাপোর্ট করে। উপলভ্য সব অ্যাট্রিবিউটের রেফারেন্সের জন্য, ViewGroup ক্লাসের জন্য সংশ্লিষ্ট রেফারেন্স ডকুমেন্টেশন দেখুন, যেমন, LinearLayout XML অ্যাট্রিবিউট।

<View>
একটি স্বতন্ত্র UI কম্পোনেন্ট, সাধারণত উইজেট হিসেবে উল্লেখ করা হয়। বিভিন্ন ধরনের View অবজেক্টের মধ্যে TextView, Button ও CheckBox অন্তর্ভুক্ত।

গুণাবলী:

android:id
রিসোর্স আইডি। এলিমেন্টের জন্য একটি অনন্য রিসোর্স নাম, যা আপনি নিজের অ্যাপ্লিকেশন থেকে View-এর রেফারেন্স পেতে ব্যবহার করতে পারেন। আরও তথ্যের জন্য, android:id-এর ভ্যালু বিভাগ দেখুন।
android:layout_height
ডাইমেনশন বা কীওয়ার্ড। প্রয়োজনীয়। এলিমেন্টের উচ্চতা, ডাইমেনশন ভ্যালু (বা ডাইমেনশন রিসোর্স) বা কীওয়ার্ড ("match_parent" বা "wrap_content") হিসেবে। আরও তথ্যের জন্য, android:layout_height এবং android:layout_width-এর ভ্যালু বিভাগ দেখুন।
android:layout_width
ডাইমেনশন বা কীওয়ার্ড। প্রয়োজনীয়। এলিমেন্টের প্রস্থ, ডাইমেনশন ভ্যালু (বা ডাইমেনশন রিসোর্স) বা কীওয়ার্ড ("match_parent" বা "wrap_content") হিসেবে। আরও তথ্যের জন্য, android:layout_height এবং android:layout_width-এর ভ্যালু বিভাগ দেখুন।

View মূল ক্লাস আরও অ্যাট্রিবিউট সাপোর্ট করে এবং View-এর প্রতিটি ইমপ্লিমেন্টেশন আরও অনেক কিছু সাপোর্ট করে। আরও তথ্যের জন্য, লেআউট পড়ুন। উপলভ্য সব অ্যাট্রিবিউটের রেফারেন্সের জন্য, সংশ্লিষ্ট রেফারেন্স ডকুমেন্টেশন দেখুন, যেমন, TextView XML অ্যাট্রিবিউট।

<requestFocus>
View অবজেক্টকে উপস্থাপন করে এমন যেকোনও এলিমেন্ট এই খালি এলিমেন্টকে অন্তর্ভুক্ত করতে পারে, যা স্ক্রিনে এর মূল এলিমেন্টকে প্রারম্ভিক ফোকাস দেয়। প্রতিটি ফাইলে আপনি এই এলিমেন্টগুলির মধ্যে কেবল একটিই রাখতে পারবেন।
<include>
এই লেআউটে একটি লেআউট ফাইল অন্তর্ভুক্ত করে।

গুণাবলী:

layout
লেআউট রিসোর্স। প্রয়োজনীয়। লেআউট রিসোর্সের রেফারেন্স।
android:id
রিসোর্স আইডি। অন্তর্ভুক্ত লেআউটে রুট ভিউতে দেওয়া আইডি ওভাররাইড করে।
android:layout_height
ডাইমেনশন বা কীওয়ার্ড। অন্তর্ভুক্ত লেআউটে রুট ভিউতে দেওয়া উচ্চতা ওভাররাইড করে। android:layout_width-এর ঘোষণা করা হলে তবেই কার্যকর হবে।
android:layout_width
ডাইমেনশন বা কীওয়ার্ড। অন্তর্ভুক্ত লেআউটে রুট ভিউতে দেওয়া প্রস্থ ওভাররাইড করে। android:layout_height-এর ঘোষণা করা হলে তবেই কার্যকর হবে।

আপনি <include>-এ অন্য যেকোনও লেআউট অ্যাট্রিবিউট অন্তর্ভুক্ত করতে পারেন যা অন্তর্ভুক্ত লেআউটের রুট এলিমেন্ট দ্বারা সমর্থিত এবং সেগুলি রুট এলিমেন্টে সংজ্ঞায়িত করাগুলিকে ওভাররাইড করে।

সতর্কতা: আপনি যদি <include> ট্যাগ ব্যবহার করে লেআউট অ্যাট্রিবিউট ওভাররাইড করতে চান, তাহলে আপনাকে অবশ্যই android:layout_height এবং android:layout_width উভয়কেই ওভাররাইড করতে হবে যাতে অন্যান্য লেআউট অ্যাট্রিবিউট কার্যকর হয়।

লেআউট অন্তর্ভুক্ত করার আরেকটি উপায় হল ViewStub ব্যবহার করা: একটি লাইটওয়েট ভিউ যা আপনি স্পষ্টভাবে ইনফ্লেট না করা পর্যন্ত কোনও লেআউট স্পেস ব্যবহার করে না। আপনি এটি করলে, এতে android:layout অ্যাট্রিবিউট দ্বারা সংজ্ঞায়িত একটি লেআউট ফাইল অন্তর্ভুক্ত থাকে। ViewStub ব্যবহার করার ব্যাপারে আরও তথ্য পেতে, চাহিদা অনুযায়ী ভিউ লোড করুন নিবন্ধটি পড়ুন।

<merge>
একটি বিকল্প রুট এলিমেন্ট যা লেআউট হায়ারার্কিতে আঁকা হয় না। এটি রুট এলিমেন্ট হিসেবে ব্যবহার করা তখনই উপযোগী যখন আপনি জানেন যে এই লেআউটটি এমন একটি লেআউটে রাখা হয়েছে যাতে ইতিমধ্যেই উপযুক্ত পেরেন্ট View রয়েছে যা <merge> এলিমেন্টের চাইল্ডকে ধারণ করে।

আপনি যখন <include> ব্যবহার করে অন্য লেআউট ফাইলে এই লেআউটটি অন্তর্ভুক্ত করার পরিকল্পনা করেন এবং এই লেআউটের জন্য আলাদা ViewGroup কন্টেনারের প্রয়োজন হয় না তখন এটি বিশেষভাবে উপযোগী। লেআউট মার্জ করার ব্যাপারে আরও জানতে, <include> সহ লেআউট আবার ব্যবহার করুন নিবন্ধটি পড়ুন।

android:id-এর ভ্যালু

আইডি ভ্যালুর জন্য, আপনি সাধারণত এই সিনট্যাক্স ফর্ম ব্যবহার করেন: "@+id/name", যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে। প্লাস চিহ্ন, +, ইঙ্গিত করে যে এটি একটি নতুন রিসোর্স আইডি এবং aapt টুলটি R.java ক্লাসে একটি নতুন রিসোর্স ইন্টিজার তৈরি করে, যদি এটি আগে থেকে না থাকে।

<TextView android:id="@+id/nameTextbox"/>

nameTextbox-এর নাম এখন এই এলিমেন্টের সাথে অ্যাটাচ করা রিসোর্স আইডি। তারপর আপনি Java-তে আইডি যে TextView-এর সাথে যুক্ত আছে সেটি উল্লেখ করতে পারবেন:

Kotlin

val textView: TextView? = findViewById(R.id.nameTextbox)

জাভা

TextView textView = findViewById(R.id.nameTextbox);

এই কোড TextView অবজেক্ট রিটার্ন করে।

তবে, আপনি আগে থেকেই কোনও ID রিসোর্স নির্ধারণ করে থাকলে এবং সেটি আগে থেকে ব্যবহার করা না হয়ে থাকলে, android:id ভ্যালু থেকে প্লাস চিহ্ন বাদ দিয়ে আপনি সেই ID কোনও View এলিমেন্টে প্রয়োগ করতে পারবেন।

android:layout_height এবং android:layout_width-এর ভ্যালু

দৈর্ঘ্য ও প্রস্থের মান Android-এ কাজ করে এমন যেকোনও ডাইমেনশন ইউনিট (px, dp, sp, pt, in, mm) অথবা নিম্নলিখিত কীওয়ার্ড ব্যবহার করে প্রকাশ করা হয়:

মানবর্ণনা
match_parent মূল এলিমেন্টের সাথে ম্যাচ করার জন্য ডাইমেনশন সেট করে। fill_parent-কে অননুমোদিত করতে API লেভেল ৮-এ যোগ করা হয়েছে।
wrap_content এই এলিমেন্টের কন্টেন্ট ফিট করার জন্য প্রয়োজনীয় সাইজ অনুযায়ী ডাইমেনশন সেট করে।

কাস্টম ভিউ এলিমেন্ট

আপনি কাস্টম View এবং ViewGroup এলিমেন্ট তৈরি করতে এবং স্ট্যান্ডার্ড লেআউট এলিমেন্টের মতো আপনার লেআউটে সেগুলি প্রয়োগ করতে পারেন। এছাড়াও, আপনি XML এলিমেন্টে কাজ করে এমন অ্যাট্রিবিউট উল্লেখ করতে পারেন। আরও তথ্যের জন্য, কাস্টম ভিউ কম্পোনেন্ট তৈরি করুন দেখুন।

উদাহরণ:
XML ফাইল res/layout/main_activity.xml-এ সেভ করা হয়েছে:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical" >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="Hello, I am a TextView" />
    <Button android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello, I am a Button" />
</LinearLayout>

এই অ্যাপ্লিকেশন কোড onCreate() পদ্ধতিতে Activity-এর জন্য লেআউট লোড করে:

Kotlin

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main_activity)
}

জাভা

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
}
আরও দেখুন: