ConstraintSet中clone()的不同实现有什么区别?

时间:2017-09-03 16:33:12

标签: android methods android-constraintlayout

根据docs for ConstraintSetclone()方法有三种实现方式:

  • void clone(ConstraintLayout constraintLayout)
  • void clone(ConstraintSet set)
  • void clone(Context context, int constraintLayoutId)

对于文档中每个版本的解释有点模糊,所以我不完全清楚三者之间的差异以及何时应该使用每个版本。无论什么时候我都可以使用第一个没问题的东西。

1 个答案:

答案 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)(上述方法)。