استفاده مجدد از طرح‌بندی‌ها با <include>

روش Compose را امتحان کنید
Jetpack Compose جعبه ابزار UI توصیه شده برای اندروید است. نحوه کار با طرح‌بندی‌ها در Compose را بیاموزید.

اگرچه اندروید ویجت‌های مختلفی را برای ارائه عناصر کوچک، قابل استفاده مجدد و تعاملی ارائه می‌کند، ممکن است لازم باشد از اجزای بزرگ‌تری که نیاز به چیدمان خاصی دارند، دوباره استفاده کنید. برای استفاده مجدد کارآمد از طرح‌بندی‌های کامل، از تگ‌های <include> و <merge> برای جاسازی یک طرح‌بندی در طرح‌بندی دیگر استفاده کنید.

این به شما امکان می‌دهد طرح‌بندی‌های پیچیده ایجاد کنید - مانند پانل دکمه بله یا خیر یا نوار پیشرفت سفارشی با متن توضیحات. و به این معنی است که می توانید هر عنصری از برنامه خود را که در چندین طرح بندی مشترک است استخراج کنید، آنها را به طور جداگانه مدیریت کنید و در هر طرح بندی بگنجانید. در حالی که می‌توانید با نوشتن یک View سفارشی، اجزای رابط کاربری جداگانه ایجاد کنید، می‌توانید با استفاده مجدد از یک فایل طرح‌بندی، این کار را راحت‌تر انجام دهید.

یک طرح قابل استفاده مجدد ایجاد کنید

با ایجاد یک فایل 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> ، ویژگی‌های layout را لغو کنید، android:layout_height و android:layout_width نیز لغو کنید تا سایر ویژگی‌های طرح‌بندی اعمال شوند.

از تگ <merge> استفاده کنید

تگ <merge> به حذف گروه‌های نمایش اضافی در سلسله‌مراتب نمای شما کمک می‌کند، زمانی که یک طرح‌بندی را در طرح‌بندی دیگر قرار دهید. یک مورد استفاده از <merge> زمانی است که یک نمای سفارشی را با گسترش ViewGroup پیاده سازی می کنید.

به عنوان مثال، اگر چیدمان اصلی شما یک LinearLayout عمودی است که در آن دو نمای متوالی را می توان در چندین طرح بندی مجددا استفاده کرد، پس طرح قابل استفاده مجدد در جایی که دو نما را قرار می دهید به نمای ریشه خود نیاز دارد. با این حال، استفاده از LinearLayout دیگر به عنوان ریشه برای طرح‌بندی قابل استفاده مجدد، منجر به یک LinearLayout عمودی در داخل یک LinearLayout عمودی می‌شود. LinearLayout تو در تو هیچ هدف واقعی ندارد و عملکرد رابط کاربری شما را کند می کند.

در عوض، می‌توانید یک 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> ، به منبع Layout مراجعه کنید.