본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Android Layout Tricks #3 : Optimize by merging

by 돼지왕 왕돼지 2012. 11. 28.
반응형





Android Layout Tricks #3 : Optimize by merging

- 기서는 <merge /> 태그에 대해 다룬다.


- <merge /> 태그는 view tree level 을 줄여서 android layouting 을 최적화시킬 수 있다.


- Title bar 가 있는 경우 기본 View tree 는 다음과 같이 구성된다.



- 빨간박스가 Title bar 쪽이고 왼쪽 FrameLayout 으로 시작되는 부분이 실제 우리가 구성하는 View 가 들어가는 Layout 쪽이다. 만약 당신이 정의한 Activity layout 의 root가 FrameLayout 이고, 화면은 가로 세로 모두 match_parent 를 사용하며, 다른 background, padding, gravity 등을 사용하지 않는다면, 해당 root FrameLayout 은 전혀 쓸모 없는 녀석인데도 view tree 를 구성하게 된다. 이 경우 view hierarchy 의 level 이 1 증가되는 현상은 물론 view 가 하나 더 추가되는 overhead 가 생긴다.


- 위와 같은 경우 <merge /> 태그를 활용하여 view tree level을 한 단계를 줄일 수 있다. <merge /> 태그를 사용하면, LayoutInflater 가 이 태그를 맞딱뜨렸을 때 merge 태그 안에 있는 녀석을 add 하고, merge 자체는 view 로 add 하지 않는다.


- <merge /> 태그는 <include /> 태그와 함께 사용하여 좋은 시너지 효과를 낼 수도 있고, <merge /> 태그 자체도 composite view 를 만들 때 유용하게 사용될 수 있다.

public class OkCancelBar extends LinearLayout {

    public OkCancelBar(Context context, AttributeSet attrs) {

        super(context, attrs);

        LayoutInflater.from(context).inflate(R.layout.okcancelbar, this, true);

    }

}

 
 
- Custom widget 을 만들 때 위와 같이 ViewGroup 을 extends 한 녀석을 사용하곤 하는데, 이럴 경우 xml 을 정의할 때 <merge /> 를 사용하면 좋다. 이 때(merge 를 사용한 경우) inflate 인자인, attachToRoot 항목이 true 가 되어야 한다.


<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <include

        layout="@layout/okcancelbar_button"

        android:id="@+id/okcancelbar_ok" />

        

    <include

        layout="@layout/okcancelbar_button"

        android:id="@+id/okcancelbar_cancel" />

</merge>



도움이 되셨다면 손가락 꾸욱~ ( 로그인 필요 x )



반응형

댓글