记录一个在使用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不影响。