使用RelativeLayout还是LinearLayout?
2017-08-30 15:24
651 查看
分析
1、RelativeLayout分别对所有子View进行两次measure,横向纵向分别进行一次2、LinearLayout首先会对所有的子View进行measure,并计算totalWeight(所有子View的weight属性之和),然后判断子View的weight属性是否为最大,如为最大则将剩余的空间分配给它。如果不使用weight属性进行布局,则不进行第二次measure
由此可见,weight属性对性能是有影响的
3、如果他们位于整个View树的顶端时并可能进行多层的嵌套时,位于底层的View将会进行大量的measure操作,大大降低程序性能。因此,应尽量将RelativeLayout和LinearLayout置于View树的底层,并减少嵌套
结论
(1)RelativeLayout慢于LinearLayout是因为它会让子View调用2次measure过程,而LinearLayout只需一次,但是有weight属性存在时,LinearLayout也需要两次measure。(2)RelativeLayout的子View如果高度和RelativeLayout不同,会导致RelativeLayout在onMeasure()方法中做横向测量时,纵向的测量结果尚未完成,只好暂时使用自己的高度传入子View系统。而父View给子View传入的值也没有变化就不会做无谓的测量的优化会失效,解决办法就是可以使用padding代替margin以优化此问题。
(3)在不响应层级深度的情况下,使用Linearlayout而不是RelativeLayout
(4)而为开发者默认新建RelativeLayout是希望开发者能采用尽量少的View层级,很多效果是需要多层LinearLayout的嵌套,这必然不如一层的RelativeLayout性能更好。因此我们应该尽量减少布局嵌套,减少层级结构,使用比如viewStub,include等技巧,可以进行较大的布局优化
相关文章推荐
- 点击textview 使用selector改变对应viewGroup(LinearLayout,RelativeLayout)的背景
- android linearLayout 和 RelativeLayout使用的注意事项
- Android中LinearLayout、RelativeLayout、TableLayout、AbsoluteLayout容器的使用
- Android中LinearLayout、RelativeLayout、TableLayout、AbsoluteLayout容器的使用
- LinearLayout和RelativeLayout的使用
- Android 布局之LinearLayout和RelativeLayout
- LinearLayout 和 RelativeLayout
- RelativeLayout的对齐属性大全(LinearLayout不可用)
- (转)用android LinearLayout和RelativeLayout实现listView的listItem布局
- 用LinearLayout和RelativeLayout实现精确布局(一个经常用到的布局)
- 对android LinearLayout中layout_weight属性使用
- android LinearLayout和RelativeLayout实现精确布局
- Android中LinearLayout框架使用案例26Days TO_1
- linearLayout 和 relativeLayout的属性区别
- 对android LinearLayout中layout_weight属性使用初探
- android LinearLayout和RelativeLayout实现精确布局
- LinearLayout、RelativeLayout、GridLayout目前安卓常用的三种布局
- 使用ViewPager+LinearLayout来实现页面之间的切换和点击
- Android UI设计的三种常见布局(LinearLayout、RelativeLayout、FrameLayout)
- Android 使用线性布局LinearLayout和Button实现一个点红块游戏