Android MeasureSpec

      在自定义ViewViewGroup的时候,我们经常会遇到int型的MeasureSpec来表示一个组件的大小:

//view.java
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

这里的两个int值分别代表组件的宽度和高度尺寸。这个值中它用一个int变量里来表示,其中既包含组件的尺寸大小,还有模式。

模式有三种:

UNSPECIFIED--组件的parent没有对它有任何约束,它可以自由决定大小

EXACTLY--父组件已经为它选择了精确的大小,那么它必须受到约束

AT_MOST--组件可以近可能大


int值如何同时表示模式和大小?

int占32bit,最高两位表示模式,低30位表示大小

00--UNSPECIFIED

01--EXACTLY

10--AT_MOST

定义了MODE_MASK=0x3 << 30;

public static int makeMeasureSpec(int size, int mode) {
    return size + mode;
}

public static int getMode(int measureSpec) {
    return (measureSpec & MODE_MASK);
}

public static int getSize(int measureSpec) {
    return (measureSpec & ~MODE_MASK);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值