Есть два способа сделать это, используя ConstraintLayout
: Цепочки и Рекомендации . Чтобы использовать цепочки, убедитесь, что вы используете ConstraintLayout
бета-версию 3 или новее, и если вы хотите использовать редактор визуального макета в Android Studio, убедитесь, что вы используете Android Studio 2.3 бета-версию 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
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" />