Это можно сделать двумя способами с помощью ConstraintLayout
: Chains. и Рекомендации. Чтобы использовать цепочки, убедитесь, что вы используете ConstraintLayout
Beta 3 или новее, и если вы хотите использовать редактор визуального макета в Android Studio, убедитесь, что вы используете Android Studio 2.3 Beta 1 или новее.
Метод 1. Использование цепочек
Откройте редактор макета и добавьте свои виджеты как обычно, добавляя родительские ограничения по мере необходимости. В этом случае я добавил две кнопки с ограничениями внизу родительского элемента и сбоку от родительского элемента (левая сторона для кнопки «Сохранить» и правая сторона для кнопки «Поделиться»):
Обратите внимание, что в этом состоянии, если я перехожу в альбомный режим, виды не заполняют родительский элемент, а привязываются к углам:
Выделите оба представления, нажав Ctrl / Cmd или перетащив рамку вокруг представлений:
Затем щелкните виды правой кнопкой мыши и выберите «Центрировать по горизонтали»:
Это устанавливает двунаправленную связь между представлениями (так определяется цепочка). По умолчанию стиль цепочки - «распространение», который применяется, даже если атрибут XML не включен. Придерживаясь этого стиля цепочки, но установка ширины наших представлений на 0dp
позволяет представлениям заполнять доступное пространство, равномерно распределяясь по родительскому элементу:
Это более заметно в альбомной ориентации:
Если вы предпочитаете пропустить редактор макета, результирующий 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 - Использование рекомендаций
Откройте свой макет в редакторе и нажмите кнопку с направляющими:
Затем выберите «Добавить вертикальную направляющую»:
Появится новая направляющая, которая по умолчанию, скорее всего, будет привязана к левой стороне в относительных значениях (обозначена стрелкой, направленной влево):
Щелкните стрелку влево, чтобы установить процентное значение, затем перетащите направляющую до отметки 50%:
Направляющую теперь можно использовать в качестве привязки для других представлений. В моем примере я прикрепил правую часть кнопки сохранения и левую часть кнопки общего доступа к направляющей:
Если вы хотите, чтобы представления заполняли доступное пространство, тогда ограничение должно быть установлено на «Любой размер» (волнистые линии, идущие горизонтально):
(Это то же самое, что установить layout_width
на 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" />
person
AdamK
schedule
30.05.2016