[Android Studio] include 와 merge

Minjun Kim·2023년 8월 16일
0

Android

목록 보기
10/47
post-thumbnail

레이아웃 사용에 편의를 제공하는 xml tag

  • 즉, 하나의 item 레이아웃을 여러 액티비티 레이아웃에 간편하게 넣을 수 있다.

예제로 살펴보자.

  • 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>

  • MainActivity
<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 를 사용할 수 있다.


  • itemLayout
<?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 파일의 경우 하나의 레이아웃 내에서 단 한 번만 선언해야 한다.


🔎 [참고 사이트]

tadomstudio.tistory
twinbraid.blogspot

profile
응애 나 아기 뉴비

0개의 댓글