Android 台灣中文網
標題: ViewStub範例 [打印本頁]
作者: iamjason008 時間: 2013-10-24 13:32
標題: ViewStub範例
本帖最後由 iamjason008 於 2013-10-24 13:32 編輯
原本我對此一無所知,是剛好要做一個元件,希望它可以收起/展開,無意間在csdn找到這例子!
但沒有說明,所以我又找了下面這個網頁,再配合例子就很清楚了
以下是它的說明(出處: http://rainhomepage.appspot.com/2010/01/use-viewstub-to-optimize-the-layout-of)
ViewStub 是一個不可見的,大小為0的View,最佳用途就是實現View的延遲載入,在需要的時候再載入View,可Java中常見的性能優化方法延遲載入一樣。
當調用ViewStub的setVisibility函數設置為可見或則調用 inflate初始化該View的時候,ViewStub引用的資源開始初始化,然後引用的資源替代ViewStub自己的位置填充在ViewStub的 位置。因此在沒有調用setVisibility(int) 或則 inflate()函數之前 ViewStub一種存在元件樹層級結構中,但是由於ViewStub非常羽量級,這對性能影響非常小。 可以通過ViewStub的inflatedId屬性來重新定義引用的layout id。 例如:
<ViewStub android:id="@+id/stub"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />
上面定義的ViewStub ,可以通過id “stub”來找到,在初始化資源“mySubTree”後,stub從父元件中刪除,然後"mySubTree"替代stub的位置。初始資源"mySubTree"得到的元件可以通過inflatedId 指定的id "subTree"引用。 然後初始化後的資源被填充到一個120dip寬、40dip高的地方。
推薦使用下面的方式來初始化ViewStub:
ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();
當調用inflate()函數的時候,ViewStub 被引用的資源替代,並且返回引用的view。 這樣程式可以直接得到引用的view而不用再次調用函數 findViewById()來查找了。
運行畫面:
點擊"test"