Кнопки не равномерно занимают родительскую ширину, используя цепочки компоновки ограничений

#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 .