上一篇中提到
ViewStub
控件,这个控件被用作状态栏的占位符,所以,这篇文章就说说ViewStub
控件吧。
(1)简介
ViewStub 是一个轻量级的View,没有尺寸,不绘制任何东西,因此绘制或者移除时更省时。(ViewStub不可见,大小为0)
(2)优缺点
- 优点
实现View的延迟加载,避免资源的浪费,减少渲染时间,在需要的时候才加载View
- 缺点
- ViewStub所要替代的layout文件中不能有<merge>标签
- ViewStub在加载完后会被移除,或者说是被加载进来的layout替换掉了。
(3)使用
第一步,在布局中添加ViewStub
<ViewStub
android:id="@+id/status_bar"
android:inflatedId="@+id/inflate_status_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout="@layout/statusbar"
android:background="@android:color/black" />
ViewStub status_view = findViewById(R.id.status_bar);
status_view.setVisibility(View.VISIBLE);
//或者
//status_view.inflate();
我们必须了解以下两点
- ViewStub即使在xml中声明了,也不会显示,因为它的大小为0,只有调用
setVisibility(View.VISIBLE)
或者inflate()
之后才会将ViewStub替换为你预先加载的statusbar
布局,也就是android:layout="@layout/statusbar"
- id和inflatedId的区别?
id是ViewStub自身的id, 而inflatedId是layout的id,当执行setVisibility(View.VISIBLE)
或者inflate()
之后(也就是说ViewStub被layout替代),原来的ViewStub就不能通过id获取了
(4)作用
由于ViewStub本身大小为0,所以无需做多余的渲染(主要是onMeasure
、onLayout
、onDraw
),避免了资源的浪费,所以常常运用于view的预加载,比如自定义标题栏
,其实我们手机的状态栏就是采用ViewStub来实现的。
[本章完...]
网友评论