-
layout 재사용 <include/> <merge/>Android/Layout 2021. 9. 10. 12:36
https://developer.android.com/training/improving-layouts/reusing-layouts
https://developer.android.com/guide/topics/resources/layout-resource#include-element
<include/>
레이아웃을 포함시킬 때 사용
<merge/>
포함될 레이아웃에 ViewGroup에 해당하는 루트 뷰가 없을 경우
루트 뷰 대신 사용
루트 뷰에 있던 xmls namespace들은 모두 merge로 옮김
레이아웃 내부에 <include> 태그를 통하여 재사용 빈번한 레이아웃을 삽입
- layout (필수)
layout="@layout/삽입될레이아웃"
- android: id
삽입될 레이아웃의 루트 뷰의 id를 오버라이딩
- android: layout_width
삽입될 레이아웃의 루트 뷰에 설정된 android: layout_width를 오버라이딩 한다.
android: layout_height 가 선언되야 유효하다.
선언하지 않으면 포함될 레이아웃의 루트뷰의 android: layout_width가 적용된다.
- android: layout_height
삽입될 레이아웃의 류트 뷰에 설정된 android: layout_height를 오버라이딩 한다.
android: layout_width 가 선언되야 유효하다.
선언하지 않으면 포함될 레이아웃의 루트뷰의 android: layout_height가 적용된다.
- 삽입될 레이아웃에 ViewGroup이 존재한다면 전체 레이아웃의 계층이 깊어질 가능성이 높음.
삽입될 레이아웃에 ViewGroup이 필요없고 View들만 있는경우에
View들이 포함하는 레이아웃에 맞춰 적절히 사이즈가 측정가능하다면
ViewGroup을 사용하지 않고 <merge>태그를 통하여 삽입.
레이아웃이 포함될 때 선언되어 있는 <merge/>태그가 무시된다.
<include>에서 id를 설정하더라도 <merge>태그가 사용된 레이아웃은 루트 ViewGroup이 존재하지 않기 때문에
include에 설정된 id를 통해 뷰를 참조하더라도 null이 나오게된다.
<merge>태그를 사용한 레이아웃은 rootView가 없으므로 include에 android:layout_height, android:layout_width는 무시된다.
'Android > Layout' 카테고리의 다른 글
LayoutInflater의 inflate메서드 (0) 2021.09.10 wrap_content, match_parent와 TextView 자체 크기 (0) 2021.09.10