根据ConstraintSet
的文档,clone()
方法有三种实现:
void clone(ConstraintLayout constraintLayout)
void clone(ConstraintSet set)
void clone(Context context, int constraintLayoutId)
文档中每个版本的解释有点模糊,所以我不完全清楚这三个版本之间的区别是什么以及我应该何时使用每个版本。我已经能够在需要时毫无问题地使用第一个或任何东西。
ConstraintSet
包含以下私有字段:
private HashMap<Integer, ConstraintSet.Constraint> mConstraints;
三种clone()
方法中的每一种都将从此Map
中删除所有现有条目,然后根据传入的内容将其填充回去。从本质上讲,这些方法中的每一个都会将你调用它们的任何ConstraintSet
实例变成参数的副本。
void clone(ConstraintSet set)
此版本清除mConstraints
映射,并使用传入ConstraintSet
内的约束重新填充它。
void clone(ConstraintLayout constraintLayout)
此版本清除mConstraints
映射,并重新填充生成传入ConstraintLayout
副本所需的任何约束。
void clone(Context context, int constraintLayoutId)
此版本使用传入的Context
和布局 ID 从布局资源膨胀ConstraintLayout
实例,然后调用clone(ConstraintLayout)
(上述方法)。