介绍
ViewStub 是一个轻量级的View,没有尺寸,不绘制任何东西,因此绘制或者移除时更省时。(ViewStub不可见,大小为0)
优点
实现View的延迟加载,避免资源的浪费,减少渲染时间,在需要的时候才加载View
缺点
- ViewStub所要替代的layout文件中不能有
<merge>标签 - ViewStub在加载完后会被移除,或者说是被加载进来的layout替换掉了
用法
1 | <ViewStub |
用ViewStub加载layout文件时,可以调用 setVisibility(View.VISIBLE) 或者 inflate()1
2
3((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
// or
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
注意
- 一旦ViewStub visible/inflated,则ViewStub将从视图框架中移除,其id
stub_import也会失效 - ViewStub被绘制完成的layout文件取代,并且该layout文件的root view的id是android:inflatedId指定的id
panel_import,root view的布局和ViewStub视图的布局保持一致
实例
1 | <!-- layout_viewstub.xml 要延迟加载的view --> |
1 | <!-- act_test_viewstub.xml --> |
1 | public class ViewStubTestActivity extends FragmentActivity { |
运行结果: