根据docs for ConstraintSet
,clone()
方法有三种实现方式:
void clone(ConstraintLayout constraintLayout)
void clone(ConstraintSet set)
void clone(Context context, int constraintLayoutId)
对于文档中每个版本的解释有点模糊,所以我不完全清楚三者之间的差异以及何时应该使用每个版本。无论什么时候我都可以使用第一个没问题的东西。
答案 0 :(得分:1)
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)
(上述方法)。