5. 使用结合Hierarchy Viewer减少布局嵌套

一.使用Hierarchy Viewer减少布局层级

1.1直接删除多余的布局

场景:发现LinearLayout下只有一个SmartRefreshLayout布局,所以可以直接将LinearLayout这个布局去掉


5. 使用结合Hierarchy Viewer减少布局嵌套_第1张图片
优化前
5. 使用结合Hierarchy Viewer减少布局嵌套_第2张图片
优化后

1.2使用merge标签减少多余的布局

原理:系统会忽略merge标签,将merge标签下的视图直接放入include所在的布局中

场景 :

外层是一个vertical的LinearLayout,include的布局文件的根布局也是一个个vertical的LinearLayout,此时就可以将include的布局文件的根布局改成merge

setVisibility(int visibility)
When visibility is set to VISIBLE or INVISIBLE, inflate() is invoked and this StubbedView is replaced in its parent by the inflated layout resource.

    


    

改成


    

1.3 使用RelativeLayout/ConstraintLayout减少UI层次

constraint-layout使用介绍
constraint-layout API

1.4 使用ViewStub实现懒加载

ViewStub
注意:一个控件为GONE或者INVIVILE,即使它不被绘制,也会创建对象,初始化,占用资源

一.作用

ViewStub是一个不可见的,大小为0的视图,当ViewStub被设置为View.VISIBLE或调用inflate时,ViewStub会用inflate的视图替换自己在父容器中的位置。

二.使用

 
//使用inflate()与setVisibility(View.VISIBLE)都可以使视图填充,但是inflate可以获取待填充视图的对象,便于后续操作
 ViewStub stub = findViewById(R.id.stub);
 View inflated = stub.inflate();
//或者    stub.setVisibility(View.VISIBLE)

三.使用场景

一个页面可能有一个布局在某些情况下才显示,有些情况下不显示。此时就可以使用ViewStub,在需要时将布局加载出来而是在页面初始时就将布局全部加载出来

四.例子

  1. 未使用ViewStub时,即使无评论,无评论的布局也被填充了


    5. 使用结合Hierarchy Viewer减少布局嵌套_第3张图片
    未使用ViewStub
  2. ViewStub时,无评论时,无评论布局被填充;有评论时,无评论布局不被填充


    5. 使用结合Hierarchy Viewer减少布局嵌套_第4张图片
    使用ViewStub 有评论
5. 使用结合Hierarchy Viewer减少布局嵌套_第5张图片
使用ViewStub 无评论

你可能感兴趣的:(5. 使用结合Hierarchy Viewer减少布局嵌套)