Це можна досягти двома способами ConstraintLayout
: ланцюги та вказівки . Щоб використовувати ланцюги, переконайтеся, що ви використовуєте 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" />