Android官方開發文檔Training系列課程中文版:佈局性能優化之按需加載View

原文地址:http://android.xsoftlab.net/training/improving-layouts/loading-ondemand.html

有時應用程序中會有一些很少用到的複雜佈局。在需要它們的時候再加載可以降低內存的消耗,同時也可以加快界面的渲染速度。

定義ViewStub

ViewStub是一個輕量級的View,它沒有高寬,也不會繪製任何東西。所以它的加載與卸載的成本很低。每個ViewStub都可以使用android:layout屬性指定要加載的佈局。

下面這個ViewStub用於一個半透明的ProgressBar的加載。它只有在新工作開始時纔會顯示。

<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

當需要加載由ViewStub所指定的佈局時,可以使用setVisibility(View.VISIBLE)方法或者inflate()方法,兩者效果相同。

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

Note: inflate()方法會在加載完畢的時候返回一個View。所以不需要使用findViewById()來查找這個佈局的Root View。

一旦ViewStub所託管的View被加載,那麼ViewStub將不再是View層級的一部分。它會被所加載的佈局替換,並且會將該佈局的ID更改爲ViewStub的android:inflatedId屬性所指定的ID。

Note: ViewStub的缺點是:它當前並不支持要加載佈局的root View爲< merge/>標籤。

發佈了73 篇原創文章 · 獲贊 146 · 訪問量 65萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章