关于Android布局优化(二)
使用< ViewStub>实现View的延迟加载
之前说道可以使用< include>标签来引用布局,除此之外还可以< ViewStub>标签来实现对View的引用和延迟加载。
实例:
<ViewStub
android:id="@+id/not_show"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/is_show"/>
is_show就是引用的布局,默认是不显示的,而且大小是0
那怎么显示这个布局呢?
- 首先,需要通过findViewById()找到< ViewStub>
mViewStub = (ViewStub)findViewById(R.id.not_show);
- 然后使用inflate方法显示引用的View
View showView = mViewStub.inflate();
或者使用
mShowView.setVisibility(View.VISIBLE);//显示引用的布局
- 之后就可以使用shouView.findViewById()找到引用布局中的组件了
注意:
- 当< ViewStub>不可见时,它的大小为0;
- 当< ViewStub>设置为可见或者使用了inflate后,它就不存在了,取而代之的是被inflate的布局,并且会使用< ViewStub>中通过android:inflateId指定的ID给该布局设置ID,所以两次调用inflate会报错。
有人会问这不是很View.GONE的效果差不多吗?
二者的区别是:
< ViewStub>在初始时不显示,只有在显示的时候才会渲染布局。
而View.GONE在初始布局树的时候就已经添加到布局树上了。
所以比较起来,< ViewStub>有更高的效率。
关于Android的布局优化先写到这里,以后有新的了解再补充。
有问题欢迎提问。
也可以加“Android开发经验交流”群: 454430053