某些時候,我們需要一些很複雜的視圖卻僅僅很少用到。如果我們在它僅僅需要的時候再載入,這樣可以減少記憶體的使用并且給使用者帶來流暢的體驗。
viewstub是一個輕量級的view,沒有占有空間,沒有花費draw的資源,也沒有參與在任何一個layout裡面。
不僅建立它僅需要很少的系統資源,而且存留在view的層級也是個比較不花費資源的動作。
每一個viewstub簡單的包含一個android:layout的屬性來指定待建立的布局檔案。
下面是一個包含progress bar的viewstub例子,這對于overlay來說是透明的,progress bar僅僅會在需要導入的時候才會可見。
<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中定義的布局的時候,可以calling <code>setvisibility(view.visible)</code> or
call <code>inflate()</code>.
一旦被設定可見或者被建立,這個viewstub元件則從view層級中消失,它被建立出來的布局所替代,而且這個布局的id就是viewstub裡面用android:inflatedid屬性所定義的。
(用來定義這個viewstub的id的屬性andoid:id直到被可見才是有效的)。
note:viewstub的一個缺陷是目前并不支援建立包含有<merge>标簽的布局檔案。
更多viewstub的資訊請看:http://developer.android.com/resources/articles/layout-tricks-stubs.html