通常我们可以使用merge标签来删减多余或者额外的层级
使用merge标签需要注意两点:
1 merge只可以作为layout.xml的根节点
2 当需要扩充的layout.xml本身是由merge作为根节点的话,需要被导入的layout.xml置于viewGroup中,同时还需要设置参数attachToRoot为true
view.inflate(int resource,ViewGroup root,boolean attachToRoot)
merge还有一个用法是当用include或者viewStub标签从外部导入xml结构时,可以将被导入的xml用merge作为根节点表示,这样被嵌入父级结构中后,可以很好地将它所包含的子集融合到父级结构中,而不会出现冗余的节点
启动 sdk/tools文件夹中的hierarchyviewer.bat此时可以查看当前UI的结构图
如果此时我们的根布局是FrameLayout,那么可以用merge标签来替代他,因为系统ContentView的根布局也是FrameLayout,这样可以减少一层嵌套
include重用布局代码
ViewStub延迟加载,viewStub是一个不可见大小为0的view,当调用ViewStub的setVisibility()函数设置为可见或者调用inflate()函数初始化该View的时候,ViewStub引用的资源开始初始化
可以通过ViewStub的inflatedId属性来重新定义引用的LayoutID
ViewStub stub=(ViewStub)findViewById(R.id.stub);
View inflated=stub.inflate();
通过Layout Optimization工具可以分析所提供的Layout,并提供优化意见,可以在tools文件夹中找到layoutopt.bat并启动
想要运行它需要命令行进入sdk的tools目录,输入layoutopt加上我们的布局路径,后面可以跟上空格,添加多个布局路径
网友评论