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



根据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)(上述方法)。

相关内容

最新更新