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方法的执行

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