<merge /> 를 사용하는 이유
1. 중복되는 코드를 <merge />안에 작성하고 쓰이는 곳에서 <include />로 불러와서 사용한다.
2. 뷰계층을 최적화 시킨다.
<merge /> 태그를 이해하기 위해서는 안드로이드의 뷰 계층에 대해서 알고 있어야 한다.
*안드로이드 스튜디오의 Device Monitor에서 Hierarchy View를 사용하여 본 뷰계층 (출처:보댕님 블로그)
1. DecorView : 뷰그룹을 관리하지 않고, 밝기 조도 등을 관리하는 레이아웃
2. LinearLayout : 전체 뷰그룹을 담당하는 이름없는 리니어레이아웃으로 타이틀바 영역과 컨텐츠 영역으로 나뉜다.
3-1. FrameLayout + TextView : 타이틀바를 담당한다.
3-2. FrameLayout : 컨텐츠 영역을 담당한다. (우리가 짜는 실제 레이아웃의 최상단)
여기까지가 안드로이드에서 기본적으로 제공하는 뷰 계층
4. 이후로는 사용자가 Linear나 Relative, Frame등 마음대로 짤 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<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="match_parent"
tools:context="com.example.softheaven.firstproject.MainActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/imgstartprince"
android:layout_gravity="right"
android:layout_marginTop="31dp"
android:layout_marginRight="13dp"/>
<ImageView
android:id="@+id/start_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/imgstartbtn"
android:layout_gravity="bottom|center"
android:layout_marginBottom="10dp"/>
</FrameLayout>
만약 위 코드처럼 사용자단에서 처음으로 생성하는 레이아웃이 FrameLayout일 경우 기본으로 만들어진 FrameLayout과 중복이 되는 경우가 발생한다. (뷰계층의 depth가 깊어지면 퍼포먼스가 떨어진다고 한다.)
이때 <merge>를 쓰게되면 뷰가 보여질때 <merge>는 사라지고 자연스럽게 그 안의 내용이 합쳐지면서 중복이 사라지게 된다.
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/imgstartprince"
android:layout_gravity="right"
android:layout_marginTop="31dp"
android:layout_marginRight="13dp"/>
<ImageView
android:id="@+id/start_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/imgstartbtn"
android:layout_gravity="bottom|center"
android:layout_marginBottom="10dp"/>
</merge>
'Android' 카테고리의 다른 글
[안드로이드]타이틀바, 액션바 커스터마이징(full screen) (0) | 2016.09.05 |
---|---|
[안드로이드]ndk란? (0) | 2016.08.11 |
[안드로이드]Media (0) | 2016.07.20 |
[안드로이드] NFC사용하기 (0) | 2016.07.20 |
[안드로이드]GCM이란? node.js로 푸시알람 구현하기 (0) | 2016.06.25 |