LinearLayout源码解析

本文深入解析LinearLayout中的核心概念orientationMeasureweight。重点分析了垂直方向(Vertical)的布局原理,包括measure过程中的参数定义、子视图高度测量逻辑及weight属性处理方式。详细探讨了不同测量模式下子控件高度测量的具体行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LinearLayout源码解析

1.LinearLayout中最重要的部分:orientation Measure weight

2.orientation:分为Horizontal vertical 两种方向的原理是类似的,所以这里只分析vertical垂直方向

measure

1.定义一些列的参数

2.循环LinearLayout中的子view,并且测量他们的高度,当子view设置了weight属性,就给个标记,并且跳过该view的高度的测量

3.对于设置了weight属性的view进行测量,此时分两种情况,子控件的高度是否为0,父控件的测量模式是否为Exactly

weight

1.测量的结果是由父控件的测量模式和子控件的LayoutParams共同决定的

2.当父view的测量模式为Exactly时,如果,子view设置了weight,并且height==0,此时,测量的结果和我们分配的weight是一致的;

3.当父View的测量模式为Exactly时,如果,子view设置了weight,并且height设置为match_parent或者具体的数值时,测量的结果跟我们分配的weight是相反的;

4.当父View的测量模式为At_Most时,如果子View设置了weight,那么子View的高度会被强行设置为wrap_content,然后按照wrap_content模式进行测量

5.当父view的测量模式为At_Most时,如果子View没有设置weight,那么子View的高度跟其他viewGroup一致

参数解释

1.父类的测量模式:

EXACTLY——一般是设置了具体的值或者match_parent
当前尺寸就是当前View应该取的尺寸

AT_MOST—-wrap_content
当前尺寸是当前View能取的最大尺寸

UNSPECIFIED(不常用)
父容器没有对当前View有任何限制,当前View可以任意取尺寸

2.子类的布局参数:LayoutParams(layoutParams.weight)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值