自定义ViewGroup导致子View的gravity无效

结论:在自定义ViewGroup的onMeasure方法,给调用子View的measure方法时没有传入正确的测量规格

自定义了一个网格布局的RadioGroup 在onMeasure方法中无视子View声明的宽度,用MeasureSpec.EXACTLY+RadioGroup被平分后的宽度来测量子View

在View源码中](https://img-blog.csdnimg.cn/20210705140251736.png)

根据View的代码,测量模式是由Width与Height的高两位决定的,代码中的MODE_SHIFT为30位。
所以自己手动设置宽为

//Java
int exactly = 1<<30 +childWidth;
//Kotlin
var exactly = (1 shl 30) + childWidth

最开始自己是用Kotlin写的,测试下来一切正常,符合预期。
但是用java代码这么写,运行时发现,子View的宽度没有问题,但是xml中给子View设置的gravity="center"并没有生效,子View中的文字全部变成左对齐了(在Ktolin中居中是有效的)。通过调试发现是exactly的问题。不知道为什么,在java中不能这么写,好在Android提供了makeMeasureSpec方法,并不需要我们手动生成模式+数值

int exactly = MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值