레이아웃 사용에 편의를 제공하는 xml tag
예제로 살펴보자.
itemLayout이 MainActivity, SubActivity, DetailActivity 총 3개의 액티비티에 들어간다.
itemView를 그대로 3번 복붙해도 되지만, include
를 사용하면 간편하다.
itemLayout
<?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">
<LinearLayout
android:id="@+id/main_addView_upper"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/main_postUserIcon"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginEnd="16dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_main_test" />
<TextView
android:id="@+id/main_postUserId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/main_postUserId"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<ImageView
android:id="@+id/main_postImage"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginBottom="8dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/ic_main_test" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- include file -->
<include layout="@layout/itemLayout" />
<!-- include file -->
<include
android:id="@+id/include_layout2"
layout="@layout/itemLayout" />
</LinearLayout>
하나의 레이아웃에서 여러 번 선언 가능하다.
id를 지정할 수 있어 findViewById로 접근도 할 수 있다.
하지만 이런 방식은 뎁스를 늘릴 위험이 있고, 이 경우에 merge
를 사용할 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:id="@+id/main_addView_upper"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/main_postUserIcon"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginEnd="16dp"
android:adjustViewBounds="true"
android:src="@drawable/ic_main_test" />
<TextView
android:id="@+id/main_postUserId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/main_postUserId"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>
<ImageView
android:id="@+id/main_postImage"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginBottom="8dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:src="@drawable/ic_main_test" />
</merge>
이처럼 root Layout을 없애 불필요한 뎁스를 줄일 수 있다.
하지만 동시에 merge의 단점도 들어나는데, root Layout이 없는 관계로 id를 지정할 수 없다.
때문에 merge로 생성한 xml 파일의 경우 하나의 레이아웃 내에서 단 한 번만 선언해야 한다.
🔎 [참고 사이트]