Android viewStub和merge布局优化

ViewStub

什么是viewStub?

ViewStub 是一个不可见的,大小为0的视图,可以在运行过程中延时加载布局资源。当ViewStub被设置成可见,或者它的inflate() 方法被调用的时候,布局资源才会被填充,然后ViewStub本身就会被填充起来的布局资源替换掉。 ViewStub 被设置成可见或者它的inflate() 方法被调用之后,在视图树中就不存在了。使用viewStub可以使解析布局文件资源的速度加快,延迟加载系统资源,似的占用资源减少。

viewStub的使用

1.在布局中添加


定义view_stub_layout:



    

当layout属性引用的布局资源 view_stub_layout被填充之后,ViewStub就会从它的父窗体中移除,取而代之的就是abcd。通过inflatedId 属性的值可以获取到abcd.。InflateId 表示给被引用的布局的id。也就是被控制显示或隐藏的布局的id,如果不写InflateId ,如果需要的话也可以直接在被引用的布局中给出id属性

2.在需要的时候加载

ViewStub view_stub=findViewById(R.id.view_stub);
View  view=   view_stub.inflate();//返回的是最外层的布局

当ViewStub 的inflate() 方法被调用之后,ViewStub就会被填充起来的布局替换掉,并返回填充起来的View。这样,当我们想使用被填充起来的View时就不再需要调用findViewById () 方法。(实际使用的时候,如果我们需要操作被填充布局里面的数据时用inflate(),否则可以直接使用setVisibility),inflate() 方法只能被调用一次,如果再次调用会报异常信息 ViewStub must have a non-null ViewGroup viewParent。

ViewStub的setVisibility()中也调用了inflate(),但是里面做了判断,只有参数没有初始化的时候才会走inflate()。

merge

什么是merge?
merge主要是进行UI布局的优化的,删除多余的层级,优化UI。多用于替换frameLayout或者当一个布局包含另一个布局的时候,标签用于消除师徒层次结构中多余的视图组。例如你的朱布局文件是垂直的,此时如果你引入一个垂直布局的.这时如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用标签优化。标签也就是排除一个布局插入另一个布局产生的多余的viewgroup.

只能作为XML布局的根标签使用。当Inflate以开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true

你可能感兴趣的:(Android viewStub和merge布局优化)