ConstraintSet.connect()中的margin参数是要以px还是dp表示?

nuk*_*rum 5 android

val margin = 8
ConstraintSet().apply {
  connect(anId, ConstraintSet.START, anotherId, ConstraintSet.START, margin)
}
Run Code Online (Sandbox Code Playgroud)

margin作为像素还是取决于密度的像素应用?

散布在网络上的各种文章和伪经知识似乎彼此不一致。我正在寻找官方文件或原始证据。

nuk*_*rum 4

margin参数应以像素为单位提供

我最终追踪到ConstraintSet.applyTo(ConstraintLayout)并发ConstraintSet.applyToInternal(ConstraintLayout)现在这里, a 的每个子项ConstraintLayout都有其LayoutParams副本并传递给ConstraintSet.Constraint.applyTo(LayoutParams). 然后将所有参数(不加修改)从 复制ConstraintSet.Constraint到 中LayoutParams,然后将修改后的参数分配LayoutParams回子级。我认为这是提供的保证金参数应该遵循LayoutParams规则的具体证据。

在 ConstraintSet.java 中

    this.applyToInternal(constraintLayout);
    constraintLayout.setConstraintSet((ConstraintSet)null); }
Run Code Online (Sandbox Code Playgroud)

applyToInternal(ConstraintLayout)声明时

    int count = constraintLayout.getChildCount();

    //...

    LayoutParams param;
    for(int i = 0; i < count; ++i) {
        View view = constraintLayout.getChildAt(i);
        //...
        param = (LayoutParams)view.getLayoutParams();
        constraint.applyTo(param);
        view.setLayoutParams(param);
        //...
    }

    //...
Run Code Online (Sandbox Code Playgroud)

applyTo(LayoutParams)声明时

    //...
    param.leftMargin = this.leftMargin;
    param.rightMargin = this.rightMargin;
    param.topMargin = this.topMargin;
    param.bottomMargin = this.bottomMargin;
    //...
Run Code Online (Sandbox Code Playgroud)