android View属性之onMeasure

前言:上一篇android View属性之dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent实在写不下去了,没想到Android事件机制还这么复杂,等那天彻底弄会了再来补充,现在开始下一篇讲解。


android View属性之onMeasure(int widthMeasureSpec, int heightMeasureSpec)

Measure顾名思义,就是测量,在view里作用是测量该控件的大小,在测量之前要了解MeasureSpec类的,分别是

3种模式UNSPECIFIED, EXACTLY和AT_MOST。和两个方法getMode,getSize


AT_MOST,specSize 代表的是最大可获得的空间(及你设置的参数为wrap_parent); 

EXACTLY,specSize 代表的是精确的尺寸(及你在控件设置的时候设置的match_parent和具体数字); 
UNSPECIFIED,对于控件尺寸来说,没有任何参考意义(几乎用不到)。

getMode获取模式

getSize获取设置的数字

在测量onMeasure函数传入的数字中就有这两种方法获取的值,大家应该会觉得奇怪,一个数怎么会有两种值呢

这里大家就自己看源码。我没看懂,只知道每个数字中含有两个值,用上面两个方法解析。

现在看看直接继承view不对控件做测量处理的效果

1,不管你是设置的match_parent还是wrap_parent都是占满父布局的空间

2,当你设置具体数字时候,显示具体大小

代码设置为:

android:layout_width="match_parent"
android:layout_height="wrap_content"

这个在最后一次执行是对的,不知道怎么回事


这个是对的

   android:layout_width="200dp"
   android:layout_height="wrap_content"


在这里View的onMesaure会执行4次,主要原因是viewGroup的原因,到讲viewgroup的时候再说原因

那么问题来了,我们在使用系统控件时候,我们设置为wrap_parent的时候它会根据内容显示相应大小,而不是占满全部父控件的区域,所以,在自定义控件如果是继承view的情况下要至少要对onMeasure的AT_MOST这个情况做处理,不然一个控件就直接占满啦,在最后填上这句话

setMeasuredDimension(widthSize, heightSize);

不然也没有效果,如果没有调用super的话,不填这句会报错



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值