提高顯示布局文件的性能 3 - 按需載入視圖(ViewStub的使用方法)
Loading Views On Demand [按需載入視圖]
某些時候,我們需要一些很複雜的視圖卻僅僅很少用到。如果我們在它僅僅需要的時候再載入,這樣可以減少內存的使用並且給用戶帶來流暢的體驗。
Define a ViewStub [定義ViewStub]
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" />
Load the ViewStub Layout [載入ViewStub的布局]
當你想要載入在ViewStub中定義的布局的時候,可以callingsetVisibility(View.VISIBLE)
or
call inflate()
.((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// or View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();一旦被設置可見或者被創建,這個ViewStub組件則從View層級中消失,它被創建出來的布局所替代,而且這個布局的ID就是ViewStub裏麵用android:inflatedId屬性所定義的。
(用來定義這個ViewStub的ID的屬性andoid:id直到被可見才是有效的)。
Note:ViewStub的一個缺陷是目前並不支持創建包含有<merge>標簽的布局文件。
最後更新:2017-04-04 07:03:06