লেআউটগুলিকে <অন্তর্ভুক্ত করুন>

কম্পোজ পদ্ধতিটি চেষ্টা করুন
অ্যান্ড্রয়েডের জন্য Jetpack Compose হলো প্রস্তাবিত UI টুলকিট। Compose-এ কীভাবে লেআউট নিয়ে কাজ করতে হয় তা শিখুন।

যদিও অ্যান্ড্রয়েড ছোট, পুনঃব্যবহারযোগ্য ও ইন্টারেক্টিভ উপাদান প্রদানের জন্য বিভিন্ন ধরনের উইজেট সরবরাহ করে, আপনার এমন বড় কম্পোনেন্টও পুনঃব্যবহার করার প্রয়োজন হতে পারে যার জন্য একটি বিশেষ লেআউট প্রয়োজন। সম্পূর্ণ লেআউটগুলি দক্ষতার সাথে পুনঃব্যবহার করতে, একটি লেআউটের ভিতরে আরেকটি লেআউট এম্বেড করার জন্য <include> এবং <merge> ট্যাগ ব্যবহার করুন।

এর মাধ্যমে আপনি জটিল লেআউট তৈরি করতে পারেন—যেমন একটি হ্যাঁ বা না বাটন প্যানেল অথবা বর্ণনামূলক টেক্সট সহ একটি কাস্টম প্রোগ্রেস বার। এবং এর মানে হলো, আপনি আপনার অ্যাপ্লিকেশনের এমন যেকোনো উপাদান যা একাধিক লেআউটে সাধারণ, তা আলাদা করে পরিচালনা করতে এবং প্রতিটি লেআউটে অন্তর্ভুক্ত করতে পারবেন। যদিও আপনি একটি কাস্টম View লিখে স্বতন্ত্র UI কম্পোনেন্ট তৈরি করতে পারেন, তবে একটি লেআউট ফাইল পুনরায় ব্যবহার করে আপনি এটি আরও সহজে করতে পারেন।

একটি পুনঃব্যবহারযোগ্য লেআউট তৈরি করুন

প্রথমে একটি নতুন XML ফাইল তৈরি করুন এবং যে লেআউটটি আপনি পুনরায় ব্যবহার করতে চান তা সংজ্ঞায়িত করুন। উদাহরণস্বরূপ, এখানে একটি লেআউট রয়েছে যা প্রতিটি অ্যাক্টিভিটিতে অন্তর্ভুক্ত করার জন্য একটি টাইটেল বার সংজ্ঞায়িত করে ( titlebar.xml ):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/titlebar_bg"
    tools:showIn="@layout/activity_main" >

    <ImageView android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:src="@drawable/gafricalogo" />
</FrameLayout>

আপনি যেসব লেআউটে এই লেআউটটি যোগ করার পরিকল্পনা করছেন, সেগুলোর প্রতিটিতে রুট View ঠিক তেমনই হতে হবে যেমনটি আপনি দেখাতে চান।

<include> ট্যাগ ব্যবহার করুন

লেআউটের ভিতরে যেখানে আপনি পুনঃব্যবহারযোগ্য কম্পোনেন্টটি যোগ করতে চান, সেখানে <include> ট্যাগটি যুক্ত করুন। উদাহরণস্বরূপ, এখানে একটি লেআউট দেওয়া হল যা পূর্ববর্তী উদাহরণ থেকে টাইটেল বারটি অন্তর্ভুক্ত করে:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/app_bg"
    android:gravity="center_horizontal">

    <include layout="@layout/titlebar"/>

    <TextView android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:text="@string/hello"
              android:padding="10dp" />
    ...
</LinearLayout>

আপনি <include> ট্যাগের মধ্যে অন্তর্ভুক্ত লেআউটের রুট ভিউ-এর সমস্ত লেআউট প্যারামিটার—যেকোনো android:layout_* অ্যাট্রিবিউট—উল্লেখ করে ওভাররাইড করতে পারেন। নিম্নলিখিত উদাহরণে এটি দেখানো হয়েছে:

<include android:id="@+id/news_title"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         layout="@layout/title"/>

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

<merge> ট্যাগ ব্যবহার করুন

একটি লেআউটের মধ্যে অন্য একটি লেআউট অন্তর্ভুক্ত করার সময়, <merge> ট্যাগটি আপনার ভিউ হায়ারার্কি থেকে অপ্রয়োজনীয় ভিউ গ্রুপগুলো দূর করতে সাহায্য করে। <merge> এর একটি ব্যবহার হলো যখন আপনি একটি ViewGroup এক্সটেন্ড করে একটি কাস্টম ভিউ তৈরি করেন।

উদাহরণস্বরূপ, যদি আপনার প্রধান লেআউটটি একটি ভার্টিকাল LinearLayout হয়, যেখানে দুটি পরপর ভিউ একাধিক লেআউটে পুনরায় ব্যবহার করা যায়, তাহলে যে পুনঃব্যবহারযোগ্য লেআউটে আপনি ভিউ দুটি রাখবেন, সেটির নিজস্ব একটি রুট ভিউ প্রয়োজন। তবে, পুনঃব্যবহারযোগ্য লেআউটের রুট হিসেবে আরেকটি LinearLayout ব্যবহার করলে, তার ভেতরে আরেকটি ভার্টিকাল LinearLayout LinearLayout তৈরি হয়। এই নেস্টেড LinearLayout কোনো বাস্তব উদ্দেশ্য নেই এবং এটি আপনার UI-এর পারফরম্যান্স কমিয়ে দেয়।

এর পরিবর্তে, আপনি একটি কাস্টম ভিউ তৈরি করতে একটি LinearLayout এক্সটেন্ড করতে পারেন এবং এর চাইল্ড ভিউগুলো বর্ণনা করার জন্য একটি লেআউট XML ব্যবহার করতে পারেন। XML-এর শীর্ষ ট্যাগটি LinearLayout এর পরিবর্তে <merge> হবে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/add"/>

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/delete"/>

</merge>

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

<include> সম্পর্কে আরও তথ্যের জন্য, লেআউট রিসোর্স দেখুন।