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

被折叠的 条评论
为什么被折叠?



