MeasureSpecMode 的三个值都是什么意思?

Section1

查看View源码中的

/**
 * Extracts the mode from the supplied measure specification.
 *
 * @param measureSpec the measure specification to extract the mode from
 * @return {@link android.view.View.MeasureSpec#UNSPECIFIED},
 *         {@link android.view.View.MeasureSpec#AT_MOST} or
 *         {@link android.view.View.MeasureSpec#EXACTLY}
 */
@MeasureSpecMode
public static int getMode(int measureSpec) {
    //noinspection ResourceType
    return (measureSpec & MODE_MASK);
}
 
 
Section2

继续朝上找,有如下变量,
 
private static final int MODE_SHIFT = 30;
/**
 * Measure specification mode: The parent has not imposed any constraint
 * on the child. It can be whatever size it wants.
 */
public static final int UNSPECIFIED = 0 << MODE_SHIFT;

/**
 * Measure specification mode: The parent has determined an exact size
 * for the child. The child is going to be given those bounds regardless
 * of how big it wants to be.
 */
public static final int EXACTLY     = 1 << MODE_SHIFT;

/**
 * Measure specification mode: The child can be as large as it wants up
 * to the specified size.
 */
public static final int AT_MOST     = 2 << MODE_SHIFT;


这三个值是多少呢?

Section3

public static void main(String args[]){

    System.out.println(getFullBinaryString(UNSPECIFIED));
    System.out.println(getFullBinaryString(EXACTLY));
    System.out.println(getFullBinaryString(AT_MOST));
}
public static String getFullBinaryString(int num){
    char [] mChars = new char [32];
    for (int i = 0;i<32;i++){
        mChars[31-i]= (char)((num>>i&1)+'0');
    }
    return new String (mChars);
}
 
打印结果如下:
09-26 18:24:07.975 8120-8120/? I/System.out: 00000000000000000000000000000000
09-26 18:24:07.975 8120-8120/? I/System.out: 01000000000000000000000000000000
09-26 18:24:07.975 8120-8120/? I/System.out: 10000000000000000000000000000000

========================================================

可以看到,这个其实就是利用了32位的int值的左侧两位存了 这三种状态。


顺便说下:

UNSPECIFIED   未指定

EXACTLY      指定

AT_MOST      指定了最大值





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值