约束集连接

时间:2017-06-20 08:05:01

标签: android view android-constraintlayout

约束集connect的官方文档说:https://developer.android.com/reference/android/support/constraint/ConstraintSet.html#connect(int,int,int,int,int)

void connect (int startID, 
                int startSide, 
                int endID, 
                int endSide, 
                int margin)

约束的边际(保证金必须是正面的)

根据我的理解,如果我想从左到右连接两个视图,那么这个边距是左边距。

//

从左到右
constraintset.connect(textView.id,ConstraintSet.LEFT,previousTextViewId,ConstraintSet.RIGHT,10)

然后10是左边距。我对吗?我已经实现了这个概念,但即使没有右边或左边也没有设置边距。我错过了什么?

1 个答案:

答案 0 :(得分:5)

您的理解也是我理解事物的方式。以下是检查工作原理的快速方法。

在下面的布局中,textRight的左上角与textLeft的右下角对齐。当MainActivity运行时,textRight应向下移动1,000px,向右移动1,000px。它向下移动1,000像素,但根本不向右移动。

我认为这是一个悬而未决的问题。见issue report

我不知道解决方法,我很惊讶这甚至可能是一个错误。如果有人看到错误,我愿意更正。

<强> two_text_views.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="TextView1"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginStart="8dp" />

    <TextView
        android:id="@+id/textRight"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView2"
        android:layout_marginTop="0dp"
        app:layout_constraintTop_toBottomOf="@+id/textLeft"
        app:layout_constraintStart_toEndOf="@+id/textLeft"
        android:layout_marginStart="0dp" />
</android.support.constraint.ConstraintLayout>

**MainActivity.java**

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ConstraintLayout layout;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.two_text_views);

        ConstraintSet constraints = new ConstraintSet();
        constraints.clone(layout);
        constraints.connect(R.id.textRight, ConstraintSet.LEFT, R.id.textLeft, ConstraintSet.RIGHT, 1000);
        constraints.connect(R.id.textRight, ConstraintSet.TOP, R.id.textLeft, ConstraintSet.BOTTOM, 1000);
        constraints.applyTo(layout);
    }
}

编辑所以,这是一个修复。使用ConstraintSet.STARTConstraintSet.END代替ConstraintSet.LEFTConstraintSet.RIGHT。我刚尝试过,它运作正常。我不能说为什么左右不能工作。