В чем разница между Start и Left в ConstraintLayout?

#android #android-constraintlayout

Вопрос:

Я знаю это Start = Left и End = Rignt в ConstraintLayout .

Однако, помимо этого, то, что появляется на экране предварительного просмотра, немного отличается.

Когда ограничение используется как layout_constraintLeft_toLeftOf="parent" (и правильно)

введите описание изображения здесь

Когда ограничение используется как layout_constraintStart_toStartOf="parent" (и заканчивается)

введите описание изображения здесь

Как вы можете видеть разницу на изображении, когда Left and Right они используются, они не полностью прикреплены к parent изображению , но немного отделены друг от друга. Но Start and End привязаны к parent .

До этого момента я думал, что это одно и то же.

В чем разница между ними двумя?

В настоящее время я хочу прикрепить только первую линейную разметку слева на первом изображении. (Оставьте фиксированными позиции второй и третьей линейной разметки)


XML

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;layout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"gt;  lt;androidx.constraintlayout.widget.ConstraintLayout  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_marginHorizontal="10dp"  android:layout_marginVertical="8dp"gt;  lt;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"gt;  lt;TextView  android:id="@ id/set"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="1"  android:textSize="16dp" /gt;  lt;TextView  android:id="@ id/unit_set"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="set"  android:textSize="16dp" /gt;  lt;/LinearLayoutgt;   lt;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"gt;  lt;EditText  android:id="@ id/weight"  android:layout_width="53dp"  android:layout_height="wrap_content"  android:inputType="numberDecimal"  android:maxLength="5"  android:textSize="16dp" /gt;  lt;TextView  android:id="@ id/unit_kg"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="lb"  android:textSize="16dp" /gt;  lt;/LinearLayoutgt;   lt;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"gt;  lt;EditText  android:id="@ id/rep"  android:layout_width="55dp"  android:layout_height="wrap_content"  android:inputType="numberDecimal"  android:maxLength="5"  android:textSize="16dp" /gt;   lt;TextView  android:id="@ id/unit_rep"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="rep"  android:textSize="16dp" /gt;  lt;/LinearLayoutgt;  lt;/androidx.constraintlayout.widget.ConstraintLayoutgt; lt;/layoutgt;  

Комментарии:

1. Каков идентификатор представления, которое вы хотите настроить?

2. @AliSh Я хочу прикрепить только макет id вызываемого ll_set слева.

3. «Я знаю, что Start = Слева и End = Rignt в ConstraintLayout». Это верно для англоязычных языков. В арабоязычных языках Начальная и левая части не одинаковы.

Ответ №1:

Ваша проблема в том, что вы используете app:layout_constraintLeft_toLeftOf и. app:layout_constraintRight_toLeftOf Если вы хотите изменить его, вы должны изменить их оба на layout_constraintStart_toStartOf и layout_constraintEnd_toStartOf .

Вы должны использовать одну из этих комбинаций(слева и справа) или (начало и конец).

Вы не должны использовать app:layout_constraintStart_toStartOf с app:layout_constraintRight_toLeftOf

Кроме того, когда вам необходимо поддерживать языки RTL, такие как арабский, начало!=слева и конец!=справа

Комментарии:

1. Я согласен с этим ответом. Используйте все слева/справа или начало/конец, но не смешивайте их. Вероятно, лучше использовать влево/вправо и начало/конец, чтобы охватить базы, но это может зависеть от вашего minSdk. В любом случае, вы можете рассмотреть возможность сообщения об этом как об ошибке, поскольку это то, что команда ConstraintLayout может захотеть устранить.

2.спасибо вам за ответ. Мне очень жаль, но я попрошу немного больше. 1. Почему бы не использовать layout_constraintStart_toStartOf и layout_constraintRight_toLeftOf вместе? (или используя Конец и влево вместе) 2. Я хочу переместить только вид id ll_set to the left , как я могу это сделать? При использовании margin , ll_weight а ll_rep также перемещении.

3. 1. Речь идет о том, как реализован ConstarinLayout, 2. Вы можете установить layout_width=»0dp» для всех линейных макетов, при необходимости добавьте android:gravity и для линейных макетов