ConstraintLayout中的Start和Left有什么区别?

What is the difference between Start and Left in ConstraintLayout?

我知道 Start = LeftEnd = RigntConstraintLayout.

但是,除此之外,预览屏幕上显示的内容略有不同。

当约束用作layout_constraintLeft_toLeftOf="parent"(和右)

当constraint作为layout_constraintStart_toStartOf="parent"(and End)

正如您在图像中看到的差异,当使用 Left and Right 时,它们并没有完全依附于 parent,而是稍微分开。 但是 Start and End 附加到 parent.

直到现在,我还以为它们是同一回事。

两者有什么区别?

目前,我要做的是仅将第一个 LinearLayout 附加到第一张图片的左侧。 (保持第二个和第三个LinearLayout的位置不变)


XML

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="10dp"
        android:layout_marginVertical="8dp">
        <LinearLayout
            android:id="@+id/ll_set"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintRight_toLeftOf="@id/ll_weight"
            app:layout_constraintTop_toTopOf="parent">
            <TextView
                android:id="@+id/set"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="1"
                android:textSize="16dp" />
            <TextView
                android:id="@+id/unit_set"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="set"
                android:textSize="16dp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll_weight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"

            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/ll_set"
            app:layout_constraintRight_toLeftOf="@id/ll_rep">
            <EditText
                android:id="@+id/weight"
                android:layout_width="53dp"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"
                android:maxLength="5"
                android:textSize="16dp" />
            <TextView
                android:id="@+id/unit_kg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="lb"
                android:textSize="16dp" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ll_rep"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toRightOf="@id/ll_weight"
            app:layout_constraintRight_toRightOf="parent">
            <EditText
                android:id="@+id/rep"
                android:layout_width="55dp"
                android:layout_height="wrap_content"
                android:inputType="numberDecimal"
                android:maxLength="5"
                android:textSize="16dp" />

            <TextView
                android:id="@+id/unit_rep"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="rep"
                android:textSize="16dp" />
        </LinearLayout>
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

您的问题是您正在使用 app:layout_constraintLeft_toLeftOfapp:layout_constraintRight_toLeftOf。如果你想更改它,你应该将它们都更改为 layout_constraintStart_toStartOflayout_constraintEnd_toStartOf.

您应该使用这些组合之一(左和右)或(开始和结束)。

您不应将 app:layout_constraintStart_toStartOfapp:layout_constraintRight_toLeftOf

一起使用

此外,当您必须支持阿拉伯语等 RTL 语言时,start!=left 和 end!=right