自定义View的onMeasure()实现的基本原则

1.处理padding属性和margin属性:自身属性padding和子控件的margin属于自身尺寸的一部分,所以计算尺寸时要算上这两部分,给子控件准备MeasureSpec时也要注意减去子控件的margin

2.为每个子控件单独准备一个MeasureSpec:子控件的width/height为WRAP_CONTENT时,则specMode为ATMOST,为精确值时,则为Exactly。而specSize则根据实际情况灵活给定,子控件的测量结果可能会互相影响,或者前一个子控件的测量结果,影响着后一个子控件的空间。

3.调用子控件的measure()方法而不是onMeasure()方法:measure()会设置PFLAG_LAYOUT_REQUIRED标志,为布局控件放行,还有检查onMeasure()是否合理复写。

4.处理MEASURE_STATE_TOO_SMALL:测量控件时要在setMeasureDimension()时慎加这个标志,因为这个标志会引起重新测量影响效率。在子控件检查MeasureState有这个标志时,要尽量满足子控件的要求,为子控件调整MeasureSpec并重新测量该子控件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值