关于Android视图Measue阶段的问题

在阅读Android视图的测量源码时,作者对MeasureSpec的使用产生疑问。MeasureSpec用于封装父视图对子视图的测量要求,其30位及以下表示大小,31-32位表示模式。问题在于MEASURED_STATE_TOO_SMALL和MODE_MASK的位过滤不同,作者疑惑为何不将MEASURED_STATE_TOO_SMALL定义为0x1<<30。
摘要由CSDN通过智能技术生成

各位大牛

在阅读Android视图measure相关源码时小弟有一处不解,抛出来请各位给分析分析

我们都知道MeasureSpec封装了测量过程中父视图对子视图的要求,即它的0-30位表示size,31-32位表示模式。

那么问题来了,看下面的代码

View.java代码

public static final int MEASURED_STATE_TOO_SMALL = 0x01000000; 
public static int resolveSizeAndState(int size, int measureSpec, int childMeasuredState) {
        int result = size;
        int specMode = MeasureSpec.getMode(measureSpec);
        int specSize =  MeasureSpec.getSize(measureSpec);
        switch (specMode) {
        case MeasureSpec.UNSPECIFIED:
            result = size;
            break;
        case MeasureSpec.AT_MOST:
            if (specSize < size) {
                result = specSize | MEASURED_STATE_TOO_SMALL;
            } else {
                result = size;
            }
            break;
        case MeasureSpec.EXACTLY:
            result = specSize;
            break;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值