2012.06.28(2)——— android onMeasure和onLayout

本文详细解析了Android中视图的测量(onMeasure)与布局(onLayout)过程。介绍了MeasureSpec的作用及三种模式:UNSPECIFIED、EXACTLY和AT_MOST,并解释了它们与fill_parent和wrap_content的关系。同时,阐述了setMeasuredDimension方法的重要性及其如何避免异常。最后,讨论了ViewGroup如何通过onLayout方法对其子元素进行布局。

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

2012.06.28(2)——— android onMeasure和onLayout
参考:[url]http://blog.youkuaiyun.com/qinjuning/article/details/7110211[/url]

1. onMeasure 我的大小
a. 属于View的方法,用来测量自己和内容的来确定宽度和高度
b. view的measure方法体中会调用onMeasure
c. MeasureSpec有3种模式分别是UNSPECIFIED, EXACTLY和AT_MOST, 那么这些模式和我们平时设置的layout参数fill_parent, wrap_content有什么关系呢。经过代码测试就知道,当我们设置width或height为fill_parent时,容器在布局时调用子view的measure方法传入的模式是EXACTLY,因为子view会占据剩余容器的空间,所以它大小是确定的。而当设置为wrap_content时,容器传进去的是AT_MOST, 表示子view的大小最多是多少,这样子view会根据这个上限来设置自己的尺寸。当子view的大小设置为精确值时,容器传入的是EXACTLY
d. 在这个方法在必须调用setMeasureDimension 方法来告诉本View的Container类(各种Layout类型)所需占据的大小,如果没有设置setMeasureDimension ,Layout将会抛出异常。
e. 调用流程
e.1 设置本View视图的最终大小,该功能的实现通过调用setMeasuredDimension()方法去设置实际的高(对应属性: mMeasuredHeight)和宽(对应属性:mMeasureWidth)
e.2 如果本视图是个ViewGroup类型,则循环遍历子view的measure()方法

2、onLayout 我的位置
a. 属于ViewGroup的方法,用来为当前ViewGroup的子元素的位置和大小
b. View的layout方法体中会调用onLayout
c. 调用流程
c.1 设置该View视图位于父视图的坐标轴,即mLeft,mTop,mLeft,mBottom(调用setFrame()函数去实现)
c.2 如果该View是ViewGroup对象,需要实现onLayout方法,对每个子视图进行布局,调用该子视图的layout()方法去设置它的坐标值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值