Android - 小红书优化 - 封装ViewGroup的优化建议

问题

我们知道过多的布局嵌套对View的绘制速度是有一定影响的,多一层嵌套意味着至少多走一次绘制流程,所以开发过程中一般都会特别注意layout层级的问题。针对xml往往可以使用ConstraintLayout替换以往的四大布局,但针对自定义ViewGroup却很少有开发者关注其是否有多余的布局嵌套。

粗略看了小红书二十几个自定义ViewGroup,发现全部均有多余的布局嵌套问题,无一例外!所以建议小红书在这个方面可以着重优化一下!

如下案例:

BeautySettingView类

如上图,自定义ViewGroup  BeautySettingView继承自LinearLayout,然后直接通过inflate将xml添加为自身的子布局,这样会导致多了一层LinearLayout的嵌套,布局层次如下关系:

- BeautySettingView   (自定义ViewGroup)

    - LinearLayout  (从xml加载的布局)

        - com.xingin.alpha.emcee.beautify.NoBeautyView

        - View

        - android.recyclerview.widget.RecyclerView

理想的方案是优化成如下关系:

- BeautySettingView   (自定义ViewGroup)    

    - com.xingin.alpha.emcee.beautify.NoBeautyView

    - View        

    - android.recyclerview.widget.RecyclerView


优化方案

按照我经验,最好的方案是:xml使用merge标签

步骤如下:

1.xml布局的根节点使用merge;

2.merge节点通过指定属性tools:parentTag="android.widget.LinearLayout"进行布局预览

3.在自定义ViewGroup中重新设置相关布局属性(ps:因为merge标签上的属性通过inflate是无效的,这一点非常需要注意)


根据以上步骤,重新修改BeautySettingView

(一)xml布局的根节点使用merge:

(二)merge节点通过指定属性tools:parentTag="android.widget.LinearLayout"进行布局预览:

(三)在自定义ViewGroup中重新设置相关布局属性:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容