ConstraintLayout属性之Group中遇到的坑 设置子View不显示没效果

在使用ConstraintLayout的Group组件时,将多个控件添加到Group后,尝试将单个View的可见性设置为Gone时会无效。这是因为Group会在布局时重新设置所有子View的显示状态。设置为INVISIBLE则不受影响。解决方法是自定义Group并重写相关方法。注意,多个Group控制同一View时,最后设置的Group生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一个在使用ConstraintLayout遇到的坑。
ConstraintLayout为了方便对view的管理 ,出现了Group 但是在使用中我遇到一个问题,那么就是把多个控件添加到Group中后,对单个View的进行setVisibility为Gone的时候没有效果。
那么我来瞅瞅为为啥没效果,来看下Group的源码 对应的这段函数
在这里插入图片描述
从上图可以看到,Group在使用后,会对它所管理的所有view的显示进行重新赋值,重新设置它所管理的ID显示效果。当我们设置为Gone的时候,ConstraintLayout会重新布局,会重新调用这个方法,而我们设置的值会被Group的拦截掉,所以就没有效了。
但是当我们针对单个View 设置INVISIBLE是有效果的,并不会触发这个方法,所以是可以的。
所以如果想要有效果,只需要重新写一个Group继承这个类,然后重写这个方法就好了。

还有一个需要注意的是:因为一个Group可以设置多个子View,那么当多个Group设置同一个View后,被控制的那个子View会最后一个设置的Group控制。前面的Group不再控制那个子View.
总结:在子控件ID被设置ID后,Gone没有效果,INVISIBLE不影响。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值