ConstraintLayout中的Start和Left有什么区别?
What is the difference between Start and Left in ConstraintLayout?
我知道 Start = Left
和 End = Rignt
在 ConstraintLayout
.
但是,除此之外,预览屏幕上显示的内容略有不同。
当约束用作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_toLeftOf
和 app:layout_constraintRight_toLeftOf
。如果你想更改它,你应该将它们都更改为 layout_constraintStart_toStartOf
和 layout_constraintEnd_toStartOf
.
您应该使用这些组合之一(左和右)或(开始和结束)。
您不应将 app:layout_constraintStart_toStartOf
与 app:layout_constraintRight_toLeftOf
一起使用
此外,当您必须支持阿拉伯语等 RTL 语言时,start!=left 和 end!=right
我知道 Start = Left
和 End = Rignt
在 ConstraintLayout
.
但是,除此之外,预览屏幕上显示的内容略有不同。
当约束用作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_toLeftOf
和 app:layout_constraintRight_toLeftOf
。如果你想更改它,你应该将它们都更改为 layout_constraintStart_toStartOf
和 layout_constraintEnd_toStartOf
.
您应该使用这些组合之一(左和右)或(开始和结束)。
您不应将 app:layout_constraintStart_toStartOf
与 app:layout_constraintRight_toLeftOf
此外,当您必须支持阿拉伯语等 RTL 语言时,start!=left 和 end!=right