1.简单归简单但是也容易犯错。在此mark一下
比如我想根据一个map的内容动态添加一个 title: value这样的布局:
每次循环时都要用constraintSet.clone()
方法获取原来的约束条件即不能够把这个方法调用放到循环外,然后再拿他的引用在循环里调用...不然每一次新的循环都会把上一次的约束条件覆盖掉
2.constrainSet的获取一定要在addView的后面不然会無法约束,造成视图消失
关于addView和ConstraintSet().clone的调用顺序关系实在是太奇葩了,一不留神就没留意顺序导致约束失败,控件消失所以我决定看一丅源码...
等等,你们发现什么没这个clone竟然会拿到当前约束布局所有的子view,然后设置每一个的约束参数的visibility...也就是说如果你没在clone前将子view add进去,你就相当于你新建的view都没有设置可见性...
那我们最后不是会调用apply方法把所有动态添加的约束参数应用到约束布局中吗。难道在调用这个apply方法就不会重新设置可见度么
以下为apply方法代码
这里可以看到view调用的方法setVisibility用的参数是根据view的id从map里拿的而这个的前提条件是view被添加进的map里,洏添加map只有在调用clone的时候
如果你在clone后调用addview的话就会这样:
是的,这个就是这么沙雕完全不知道为什么这api会这么神奇...