#android #android-layout #android-constraintlayout
#Android #android-макет #android-ограничение
Вопрос:
Я пытаюсь создать цепочку с 2 кнопками внизу ConstraintLayout
, используя цепочку, но это не работает. Я удалил пару представлений над кнопками для ясности
lt;?xml version="1.0" encoding="utf-8"?gt; lt;ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" gt; lt;Button android:id="@ id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginEnd="10dp" android:text="Button 1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/button2" app:layout_constraintHorizontal_weight="1" app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintTop_toBottomOf="@id/guideline" /gt; lt;Button android:id="@ id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginStart="4dp" android:layout_marginEnd="10dp" android:text="Button 2" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHorizontal_weight="1" app:layout_constraintStart_toEndOf="@id/button1" app:layout_constraintTop_toBottomOf="@id/guideline" /gt; lt;/ConstraintLayoutgt;
Кнопки отображаются в нижней части экрана, одна рядом с другой, но они не занимают родительскую ширину, т. е. каждая занимает 50% экрана. Они обтекают текст сбоку экрана.
Что я делаю не так?
Обновить:
Я вижу, что если я добавлю что-то другое, кроме 0dp
, например 200dp
, это расширит представления. Но у меня сложилось впечатление, что я должен использовать 0dp
, чтобы уважать ограничения
Ответ №1:
Вот пример реализации распространения двух кнопок внизу их родителей с помощью ConstraintLayout
:
lt;?xml version="1.0" encoding="utf-8"?gt; lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"gt; lt;Button android:id="@ id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginEnd="8dp" android:layout_marginBottom="16dp" android:text="Button 1" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/button2" app:layout_constraintHorizontal_chainStyle="spread" app:layout_constraintStart_toStartOf="parent" /gt; lt;Button android:id="@ id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" android:text="Button 2" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@id/button1" /gt; lt;/androidx.constraintlayout.widget.ConstraintLayoutgt;
В чем разница между этой и вашей версией. Ибо button1
есть дополнительное правило, в котором указано, где находится начало кнопки: app:layout_constraintStart_toStartOf="parent"
и, соответственно button2
, где находится конец: app:layout_constraintEnd_toEndOf="parent"
. Что на самом деле помогает ContraintLayout
правильно расположить кнопки.
Кстати, вам не нужно добавлять android:layout_alignParentBottom="true"
кнопки, так как родитель не является RelativeLayout
.