안녕하세요 돼지왕왕돼지입니다.
오늘은 "Android Layout Tricks #4 : Optimize with stubs" 주제로 이야기하고자 합니다.
이 글은 http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-with.html 내용을 의역한 것입니다.
Android Layout Tricks #4 : Optimize with stubs
안드로이드 앱을 개발하다 보면, Activity 에 많은 view 들을 배치할 경우가 생기고, 이 때 거의 사용하지 않는 layout part 를 포함하는 경우가 있습니다. 고맙게도 안드로이드는 이런 거의 사용하지 않는 layout 을 ViewStub 이라는 것으로 묶어두어 view tree 를 깔끔하게 유지시키고, 필요할 때 inflate 해서 사용할 수 있도록 도와주고 있습니다. 이 ViewStub 은 <include /> 와 콤보를 이루죠.
VIewStub 은 매우 가볍고, 존재감도 거의 없는 view 입니다. dimension 을 가지고 있지도 않고, 아무것도 그리지 않습니다. 그러면서도 inflate 하기에 매우 쉽고 view hierarchy 에 부담을 주지 않은 상태로 유지합니다. VIewStub 은 lazy include 라고 하는 것이 가장 잘 된 묘사라고 볼 수 있겠습니다. ViewStub 은 코드상으로 그렇게 하고자 할때 딱 inflate 됩니다.
다음 screenshot 은 Shelves 어플을 보여줍니다.
같은 activity 에서 간혹 user 가 새로운 책을 더하거나 import 하는 경우가 생깁니다. 이 때 하단에 progress bar 와 cancel button 이 있는 layout 을 추가로 보여줍니다.
book import 하는 것은 일반적인 작업이 아닙니다. 책을 browse 하는 것과 비교하여 매우 minor 한 빈도로 발생하는 작업이라는 이야기지요. 이 import panel 은 원래 ViewStub 으로 지정되어 있습니다.
user 가 import process 를 시작하였을 때 ViewStub 은 inflate 되어 view tree 상 기존의 ViewStub element 를 layout 으로 교체합니다.
ViewStub 을 사용하기 위해 설정해 줘야 하는 설정항목들은 android:id 입니다. inflate 할 때 사용됩니다. android:layout 도 필요합니다. inflate 해서 include 해줄 layout 을 연결해줘야 하니깐요. android:inflatedId 도 필요한데, 이 녀석은 include 되는 layout 의 id 를 override 하는 녀석입니다. 마지막으로 추가적으로 적용하는 속성들은 roof layout 의 속성에 적용됩니다. 예제를 보시죠.
<ViewStub
android:id="@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/progress_overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
ViewStub 을 inflate 하기 위해서는 inflate() 함수를 호출하거나, visibility 를 VISIBLE 또는 INVISILBE 로 바꿔주면 됩니다. 이 두가지 방법 중 inflate() 는 root view 를 return 한다는 장점이 있습니다. 예제를 보시죠.
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
stub 을 inflate 하게 되면 view hierarchy 에서 stub 이 제거되고 그 자리를 inflate 된 layout 이 채운다는 사실을 꼭 기억해야 합니다.
ViewStub 은 Runtime 에 어떤 layout 을 inflate 해서 수동으로 붙여주는 것보다 훨씬 쉽게 사용할 수 있는 효율적인 방법입니다. ViewStub 의 단점은 <merge /> tag 와 함께 사용이 안 된다는 점입니다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android/안드로이드] ICS 부터 Broadcast 시 주의해야 할 점. ( Stopped Process.. ) (4) | 2012.05.01 |
---|---|
[Android/안드로이드] 안드로이드 APK 파일 용량 제한. (2) | 2012.04.24 |
[Android/안드로이드] Window Backgrounds & UI Speed (5) | 2012.04.17 |
[Android/안드로이드] Android Layout Tricks #3 : Optimize by merging. (0) | 2012.04.17 |
[Android/안드로이드] Android Layout Tricks #2 : Reusing Layouts. (0) | 2012.04.17 |
댓글