Продолжаем рассматривать возможности ConstraintLayout. 

 

 

 

match_constraints

В ConstraintLayout мы, как и раньше, можем в качестве ширины/высоты View использовать wrap_content или указать фиксированный размер в dp. А вот match_parent здесь использовать не рекомендуется. В хелпе написано следующее:
You should not use match_parent for any view in a ConstraintLayout. Instead use "match constraints" (0dp)

Нам взамен match_parent предлагают использовать match_constraints, он же 0dp. Если match_parent растягивает View по размеру родителя, то с match_constraints View займет пространство, доступное между объектами, к которым он привязан. 

 

Давайте посмотрим все три режима на примере TextView, который привязан к левой границе слева и к кнопке справа.

wrap content

Ширина по содержимому

 

фиксированный размер

Явно указываем ширину в 150dp

 

match constraints (0dp)

TetxView растянут между объектами привязок.

 

Эти режимы можно переключать в Properties не только через layout_width свойство, но и нажатием на специальный значок

Обратите внимание, что этот значок меняется в зависимости от режима. При wrap_content он выглядит как елочка, при фиксированном размере - как отрезок, а при match_constraints - как пружина.

 

Т.к. match_constraints растягивает ваше View между объектами привязок, то ему нужна двусторонняя привязка. Если ваше View привязано, например, только слева, а правой привязки нет, то match_constraints будет работать как wrap_content.

 

 

 

Выравнивание по центру

Вы можете использовать двустороннюю привязку, чтобы выровнять два View по центру.

И можно использовать скролл, чтобы менять положение относительно центра.

 

 

 

Выравнивание по тексту

Допустим, у нас есть два TextView с разными размерами шрифтов. И нам надо поместить их рядом так, чтобы тексты лежали на одной линии.

 

View можно выровнять по нижней границе сделав привязку между нижними границами

Но в этом случае тексты будут не на одной линии.

Чтобы это исправить, можно использовать выравнивание по тексту

В этом случае тексты находятся на одной линии, а нижние границы - нет.

 

 

 

Инструменты в toolbar

В toolbar есть несколько инструментов, которые могут помочь в работе.

Я пронумеровал их на скриншоте. Пойдем по порядку.

 

 

1) Показать/скрыть привязки

Если включено, то вы будете видеть все свои привязки на экране. Если выключено, то видны будут только привязки выделенного View.

 

 

2) Автопривязки

Если включено, то вы сможете создавать привязки к родителю, если поднесете View к границе родителя.

 

Либо можно создать двустороннюю привязку, если поднести View к центру родителя

 

 

3) Удалить все привязки

По нажатию этой кнопки все ваши привязки на экране будут удалены. Если нечаянно нажали, то жмите CTRL+Z и все вернется.

 

 

4) Создать привязки

Создает привязки для всех View на экране. Но делает это не очень хорошо. Возможно в будущих версия исправят, но пока что я не советую использовать.

 

 

5) Отступ

Здесь вы можете автоматически задать, какой отступ будет использован по умолчанию при создании привязки.

Первая привязка создалась с отступом 8. Затем я поменял значение по умолчанию на 24. И вторая привязка создалась уже с отступом 24.

 

 

6) Разное

В этом пункте три типа операций над View

 

Собрать

Собираем вместе несколько выделенных View сначала по горизонтали, затем по вертикали.

Эта операция не создает никаких привязок.

 

Растянуть

Растянет View между ближайшими объектами.

 

Можно равномерно растянуть несколько объектов

 

Эта операция не создает никаких привязок.

 

Разместить равномерно

Поможет равномерно разместить View

 

 

 

7) Выравнивание

По горизонтали: по левому краю, по центру, по правому краю

  

По вертикали: по тексту, по нижнему краю, по центру, по верхнему краю

 

Нижний ряд кнопок - это центрирование. Оно создает двухстороннюю привязку. Есть два режима. 

 Обычный, когда привязка создается к близлежащим объектам

 

И родительский, когда привязка создается к границам родителя.

 

 

 

8) Направляющие

Это линии, которые вы можете использовать для создания привязок.

Рассмотрим пример с вертикальной направляющей. Добавим ее на экран и отрегулируем положение

Вы можете позиционировать ее либо отступом слева, либо отступом справа, либо процентным соотношением к ширине родителя.

 

 

Рассмотрим пару примеров использования

Простой

С помощью направляющей разделяем ширину экрана на два TextView

 

 

Пример посложнее

 Здесь уже несколько направляющих, с помощью которых мы построили сетку из TextView

 

 

 

Соотношение сторон (Aspect ratio)

Рассмотрим на примере высоты View. Если у View есть двусторонняя вертикальная привязка и значение высоты установлено в match_constraints (0dp), то View растянется по высоте между объектами привязки. Мы можем настроить так, чтобы высота в этом случае не растягивалась, а зависела от ширины View.

 

Это делается так

Для View с двусторонней вертикальной привязкой ставим значение высоты в 0dp. View растягивается по высоте. Затем, включаем режим соотношения сторон, нажав на треугольник. Задаем соотношение ширины к высоте - 3 к 1. Т.е. высота теперь будет в три раза меньше ширины.

 

Меняем ширину, добавляя в TextView текст

С изменением ширины меняется и высота, чтобы соблюдалось установленное соотношение сторон 3:1.

 

 

Если у вас для View есть горизонтальная и вертикальная двусторонние привязки и для высоты и ширины установлено значение match_constraints, то вы можете переключать соотношение сторон: высота зависит от ширины или ширина от высоты. Для переключения надо нажать на треугольник

 

Сначала соотношение сторон выключено

Высота и ширина View не зависят друг от друга.

 

Затем мы включаем режим, когда высота зависит от ширины. В квадрате справа сверху появляется жирная вертикальная линия.

При изменении ширины меняется высота. А вручную изменить высоту не получается.

 

Затем ширина зависит от высоты. В квадрате справа сверху появляется жирная горизонтальная линия.

При изменении высоты меняется ширина. А вручную изменить ширину не получается.

 

 

 

Существует еще пара интересных возможностей ConstraintLayout: chains и barriers. О них будет следующий урок.

 


Присоединяйтесь к нам в Telegram:

- в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

- в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance 

- ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня




Language

Автор сайта

Дмитрий Виноградов

Подробнее можно посмотреть или почитать.

Никакие другие люди не имеют к этому сайту никакого отношения и просто занимаются плагиатом.

Социальные сети

 

В канале я публикую ссылки на интересные и полезные статьи по Android

В чате можно обсудить вопросы и проблемы, возникающие при разработке



Группа ВКонтакте



Поддержка проекта

Яндекс
410011180491924

WebMoney
R248743991365
Z551306702056

Paypal