Есть два способа сделать это, используя ConstraintLayout
: Цепочки и Рекомендации . Чтобы использовать цепочки, убедитесь, что вы используете ConstraintLayout
бета-версию 3 или новее, и если вы хотите использовать редактор визуального макета в Android Studio, убедитесь, что вы используете Android Studio 2.3 бета-версию 1 или новее.
Метод 1 - Использование цепочек
Откройте редактор макетов и добавьте виджеты как обычно, добавив родительские ограничения по мере необходимости. В этом случае я добавил две кнопки с ограничениями в нижней части родителя и на стороне родителя (левая сторона для кнопки «Сохранить» и правая сторона для кнопки «Поделиться»):
![введите описание изображения здесь](https://i.stack.imgur.com/o9Djj.png)
Обратите внимание, что в этом состоянии, если я переключу на альбомный вид, представления не заполняют родительский, а привязываются к углам:
![введите описание изображения здесь](https://i.stack.imgur.com/skPVj.png)
Выделите оба вида, нажав Ctrl / Cmd или перетащив рамку вокруг видов:
![введите описание изображения здесь](https://i.stack.imgur.com/3a2Jf.png)
Затем щелкните правой кнопкой мыши на видах и выберите «Центр по горизонтали»:
![введите описание изображения здесь](https://i.stack.imgur.com/FcE35.png)
Это устанавливает двунаправленную связь между представлениями (так определяется цепочка). По умолчанию стиль цепочки является «распространенным», который применяется, даже если атрибут XML не включен. Придерживаясь этого стиля цепочки, но устанавливая ширину наших представлений, чтобы 0dp
представления заполняли доступное пространство, равномерно распределяясь по родительскому элементу:
![введите описание изображения здесь](https://i.stack.imgur.com/ugvwQ.png)
Это более заметно в альбомной ориентации:
![введите описание изображения здесь](https://i.stack.imgur.com/tA4Dp.png)
Если вы предпочитаете пропустить редактор макетов, результирующий XML будет выглядеть так:
<android.support.constraint.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">
<Button
android:id="@+id/button_save"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/button_save_text"
android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="4dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toLeftOf="@+id/button_share"
app:layout_constraintHorizontal_chainStyle="spread" />
<Button
android:id="@+id/button_share"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/button_share_text"
android:layout_marginStart="4dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintLeft_toRightOf="@+id/button_save"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</android.support.constraint.ConstraintLayout>
Подробности:
- установка ширины каждого элемента
0dp
или MATCH_CONSTRAINT
позволяет представлениям заполнять родительский элемент (необязательно)
- виды должны быть связаны двунаправленно (справа от ссылки кнопки «Сохранить» для кнопки «Поделиться», слева от ссылки кнопки «Поделиться» для кнопки «Сохранить»), это будет происходить автоматически через редактор макетов при выборе «Центрировать по горизонтали»
- первое представление в цепочке может указывать стиль цепочки через
layout_constraintHorizontal_chainStyle
, см. документацию для различных стилей цепочки, если стиль цепочки опущен, по умолчанию используется «распространение»
- Вес цепи можно отрегулировать с помощью
layout_constraintHorizontal_weight
- этот пример для горизонтальной цепочки, есть соответствующие атрибуты для вертикальной цепочки
Метод 2 - Использование руководства
Откройте свой макет в редакторе и нажмите кнопку направляющей:
![введите описание изображения здесь](https://i.stack.imgur.com/Bysun.png)
Затем выберите «Добавить вертикальную направляющую»:
![введите описание изображения здесь](https://i.stack.imgur.com/kJ434.png)
Появится новое руководство, которое по умолчанию, скорее всего, будет привязано к левому краю в относительных значениях (обозначено левой стрелкой):
![относительное руководство редактора макетов](https://i.stack.imgur.com/h6Exx.png)
Нажмите стрелку влево, чтобы переключить ее на процентное значение, затем перетащите направляющую до отметки 50%:
![руководство по редактору макетов](https://i.stack.imgur.com/QJ6z9.png)
Теперь руководство можно использовать в качестве привязки для других видов. В моем примере я прикрепил правую кнопку сохранения и левую кнопку общего доступа к направляющей:
![окончательный макет](https://i.stack.imgur.com/slXmG.png)
Если вы хотите, чтобы представления заполняли доступное пространство, тогда ограничение должно быть установлено на «Любой размер» (волнистые линии, идущие горизонтально):
![любое ограничение размера](https://i.stack.imgur.com/EMAiW.png)
(Это то же самое , как установка layout_width
To 0dp
).
Руководство также может быть легко создано в XML, а не с помощью редактора макетов:
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guideline"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />