[Android]自定义控件主动测量自己尺寸的方法

自定义控件有时需要主动测量自己的尺寸。如ListView、RecyclerView等列表控件在ScrollView或ExpandableListView中需要保持自己的尺寸,此时比较快捷的办法是写一个自定义的控件类继承与该被包裹的控件类,然后重写其onMeason方法,让其返回默认大小而不是适应的宽高,代码如下:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // 解决显示不全的问题
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, expandSpec);
}

MeasureSpec是一个32位的整数,表示一个组件的大小,这个变量里面不仅有组件的尺寸大小,还有大小的模式。
1.精确模式(MeasureSpec.EXACTLY)
在这种模式下,尺寸的值是多少,那么这个组件的长或宽就是多少。可以理解为精确尺寸。

2.最大模式(MeasureSpec.AT_MOST)
这个也就是父组件,能够给出的最大的空间,当前组件的长或宽最大只能为这么大,当然也可以比这个小。
当第一个参数的int值填写了Integer.MAX_VALUE >> 2(即int值最大32位退2位——那两位就是留给模式的)时,表示的就是父控件允许的最大尺寸。

3.未指定模式(MeasureSpec.UNSPECIFIED)
这种情况不多,一般都是父控件是AdapterView,通过measure方法传入的模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值