ViewStub 詳解(譯文)

官方原文地址

https://developer.android.com/reference/android/view/ViewStub.html

date:2017.07.23


一個ViewStub 是一個可見的,可設置大小的View,它可以在運行的時候懶加載佈局資源(layout -> View),可以提升一定的性能.讓界面更流暢.
當一個ViewStub 被設置了可見的或者被調用了 inflate() 方法,那麼ViewStub 指定的佈局文件就會被加載(layout -> View).下圖中的
android:inflatedId=”@+id/subTree”
android:layout=”@layout/mySubTree”
兩句代碼就是指定懶加載的佈局文件,並且指定了id
當佈局資源被加載,整個ViewStub的地方就會被替換成爲加載出來的View.ViewStub會從父容器中移除,並且把加載好的View替換ViewStub原有的位置.並且View的佈局參數就是ViewStub的佈局參數(LayoutParameter)也
如果目標layout上根佈局你寫了一個id,然後在ViewStub使用中又使用了
android:inflatedId=”@+id/subTree”
那麼佈局文件中的id會被inflatedId的覆蓋哦,下面舉例使用方式:

<ViewStub android:id="@+id/stub"
          android:inflatedId="@+id/subTree"
          android:layout="@layout/mySubTree"
          android:layout_width="120dip"
          android:layout_height="40dip" />

上面ViewStub使用了一個id “stub”,你可以在運行的時候像平常一樣使用findViewById找到ViewStub.當ViewStub指定的佈局被加載,並且完成View(懶加載的)替換ViewStub的地方之後,View(懶加載的)的id “subTree” 就可以通過findViewById被找到了,這個View最終被分配的寬和高就是上面的120di p和 40dip.最好的方式去使用ViewStub的代碼如下:

ViewStub stub = findViewById(R.id.stub);
View inflated = stub.inflate();

當 inflate() 方法被調用,ViewStub被懶加載出來的View替換啦,並且直接返回,你就可以直接拿到View的引用了避免了一次findViewById方法的執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章