閱讀155 返回首頁    go 阿裏雲 go 技術社區[雲棲]


提高顯示布局文件的性能 3 - 按需載入視圖(ViewStub的使用方法)

Loading Views On Demand [按需載入視圖]

某些時候,我們需要一些很複雜的視圖卻僅僅很少用到。如果我們在它僅僅需要的時候再載入,這樣可以減少內存的使用並且給用戶帶來流暢的體驗。

Define a ViewStub [定義ViewStub]

ViewStub是一個輕量級的view,沒有占有空間,沒有花費draw的資源,也沒有參與在任何一個layout裏麵。
不僅創建它僅需要很少的係統資源,而且存留在View的層級也是個比較不花費資源的動作。
每一個ViewStub簡單的包含一個android:layout的屬性來指定待創建的布局文件。

下麵是一個包含Progress bar的ViewStub例子,這對於overlay來說是透明的,progress bar僅僅會在需要導入的時候才會可見。
  1. <ViewStub  
  2.     android:id="@+id/stub_import"  
  3.     android:inflatedId="@+id/panel_import"  
  4.     android:layout="@layout/progress_overlay"  
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="wrap_content"  
  7.     android:layout_gravity="bottom" />  

Load the ViewStub Layout [載入ViewStub的布局]

當你想要載入在ViewStub中定義的布局的時候,可以calling setVisibility(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>標簽的布局文件。

更多ViewStub的信息請看:https://developer.android.com/resources/articles/layout-tricks-stubs.html

最後更新:2017-04-04 07:03:06

  上一篇:go 中國互聯網的恥辱
  下一篇:go 中國網民在裸奔