missing constraints in constraint layout как исправить

Полный список

Android Studio по умолчанию предлагает нам использовать ConstraintLayout при создании разметки экрана. Давайте разберемся, что это за штука и как с ней работать.

Хоть это и 180-й урок, но он будет заточен под новичков, т.к. сюда будет вести ссылка из самых первых уроков. Поэтому, опытных разработчиков прошу не удивляться стилю изложения материала, начало вы можете пропустить.

Существуют несколько типов ViewGroup: LinearLayout, RelativeLayout, FrameLayout, TableLayout, ConstraintLayout и т.д.

В этом уроке мы будет разбираться, как будут вести себя компоненты в контейнере ConstraintLayout.

Практика

Чтобы вам самим попрактиковаться, рекомендую создать модуль для этого урока. О том, как создать модуль, мы уже говорили в Уроке 3.

В меню студии: File > New > New module

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Application/Library name: ConstraintLayoutIntro
Module name: p0180constraintlayoutintro
Package name: ru.startandroid.p0180constraintlayoutintro

Итак, у нас в Android Studio есть модуль. А в нем есть файл res > layout > activity_main.xml.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Откроем этот файл двойным кликом. Он выглядит так

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Убедитесь, что слева-внизу открытка вкладка Design, и режим просмотра выбран Design, а не Blueprint.

Сейчас на экране вы видите текст Hello World. Этот текст отображен с помощью View, которое называется TextView.

Вы можете видеть его в Component Tree (слева-снизу).

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Давайте удалим TextView с экрана. Для этого просто выделите его на экране или в Component Tree и нажмите кнопку Del на клавиатуре.

Теперь ConstraintLayout пуст и экран ничего не отображает.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Если вы вдруг что-то удалили по ошибке, вы всегда можете восстановить это, нажав Ctrl+Z.

А если вы там совсем чего-то наворотили и не получается все это отменить, то откройте вкладку Text (слева-снизу) и вставьте туда этот код:

Ваш экран вернется к первоначальному состоянию.

Зачем нужны привязки

Давайте добавим на экран какой-нибудь компонент, например, снова TextView. Для этого просто перетащите компонент мышкой из Palette на экран.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

После этого TextView появился на экране и в Component Tree.

Запустим приложение и посмотрим, как этот текст будет выглядеть.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Видим, что TextView уехал влево и вверх. Что-то явно пошло не так.

Если вы откроете текстовое представление вашего экрана (вкладка Text слева-снизу), то увидите, что элемент TextView подчеркнут красной линией.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Если навести на него мышкой, то он покажет ошибку:
This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you add constraints.

Этим сообщением студия говорит нам, что View не привязано. Его текущее положение на экране актуально только для разработки (т.е. только в студии). А при работе приложения, это положение будет проигнорировано, и View уедет в точку (0,0), т.е. влево-вверх (что мы и наблюдали при запуске).

Как сделать так, чтобы View в ConstraintLayout оставалось на месте и не смещалось в угол? Необходимо добавить привязки (constraints). Они будут задавать положение View на экране относительно каких-либо других элементов или относительно родительского View.

Как добавить привязки

Давайте добавим привязки для нашего TextView.

Если вы выделите на экране TextView, то можете видеть 4 круга по его бокам.
missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Эти круги используются, чтобы создавать привязки.

Создадим горизонтальную привязку. Привяжем положение TextView к левому краю его родителя. Напомню, что родителем TextView является ConstraintLayout, который в нашем случае занимает весь экран. Поэтому края ConstraintLayout совпадают с краями экрана.

Чтобы создать привязку, нажмите мышкой на TextView, чтобы выделить его. Затем зажмите левой кнопкой мыши левый кружок и тащите его к левой границе.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

TextView также уехал влево. Он привязался к левой границе своего родителя.

Но вовсе необязательно они должны быть вплотную. Мы можем задать отступ. Для этого просто зажмите левой кнопкой мыши TextView, перетащите вправо и отпустите.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

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

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

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Используем верхний кружок и тащим его к верхней границе. TextView привязывается по вертикали к верхней границе родителя. После этого можно перетащить TextView куда вам нужно, чтобы настроить горизонтальный и вертикальный отступы. При перетаскивании вы видите значения отступов.

Теперь TextView привязан и по горизонтали, и по вертикали. Т.е. он точно знает, где он должен находиться на экране во время работы приложения.

Запускаем, чтобы проверить
missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

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

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Если сейчас запустить приложение, то кнопка уедет влево-вверх потому что она ни к чему не привязана.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Мы можем привязывать не только к границам родителя, но и к другим View. Давайте привяжем кнопку к TextView.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Мы привязали кнопку к TextView, создав две привязки

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

1) Вертикальная привязка. Верхняя граница кнопки привязана к нижней границе TextView. Отступ = 82.
Т.е. можно сказать, что по вертикальной оси:
верхняя граница кнопки = нижняя граница TextView + 82

2) Горизонтальная привязка. Левая граница кнопки привязана к правой границе TextView. Отступ 103.
По горизонтальной оси:
левая граница кнопки = правая граница TextView + 103

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

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Добавим еще View. Например, CheckBox.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Давайте сделаем так, чтобы он по горизонтали находился на том же уровне, что и TextView. Для этого нам надо левую границу CheckBox привязать к левой границе TextView и сделать нулевой отступ. А по вертикали привяжем к нижней границе родителя.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Теперь чекбокс и TextView выравнены по левому краю.

Как удалить привязку

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

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Чтобы удалить сразу все привязки, есть специальная кнопка

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Привязка с двух сторон

Мы рассмотрели примеры, когда View было привязано по каждой оси только с одной стороны. Т.е. только слева или справа по горизонтали, и сверху или снизу по вертикали. Но мы можем привязать View с обоих сторон по каждой оси.

Пока рассмотрим только горизонтальную привязку. Но, разумеется, все это будет работать и для вертикальной привязки.

Очистим экран от всех View и добавим новый TextView без каких-либо привязок. Теперь привяжем его к левой и правой границам родителя.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

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

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

Давайте немного усложним пример, добавив кнопку и перенастроив привязки

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Кнопка привязана к правому краю. А TextView привязан к левому краю и к кнопке.

Если мы теперь будем перемещать кнопку, то TextView будет оставаться ровно посередине между левым краем и кнопкой.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Мы можем настроить двустороннюю привязку так, чтобы View располагалось не посередине, а ближе к левому краю или к кнопке. Для этого удобно использовать специальный скролл в Properties.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Этим скроллом вы задаете пропорцию. По умолчанию значение = 50. Это половина от 100. Соответственно, View находится на половине расстояния между объектами, к которому оно привязано. В нашем случае, при значении = 50, TextView находится посередине между левым краем и кнопкой.

Если поставить значение, например, 25, то TextView будет находится от левого края на расстоянии равном четверти расстояния между левым краем и кнопкой. Если поставить 75, то TextView будет находится от левого края на расстоянии равном 3/4 от расстояния между левым краем и кнопкой.

И как бы не менялось расстояние между левым краем и кнопкой, эти пропорции всегда будут соблюдаться.

В следующем уроке продолжим рассматривать возможности ConstraintLayout.

P.S.
Если вы пришли в этот урок по ссылке из первых уроков, то теперь вы можете вернуться и продолжить обучение. Этой информации вам будет достаточно.

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

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

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

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

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Проблема с ConstraintLayout в Android

Постараюсь вкратце описать сложившуюся ситуацию. Каковы исходные данные? Представим себе довольно-таки простенький макет, корневым элементом которого является контейнер ConstraintLayout. Внутри родительского элемента у нас располагается 4 View-компонента Button, которые имеют вид квадратной матрицы размером 2×2. Таким образом мы имеем 2 строки, каждая из которых насчитывает по 2 столбца. Компоненты, которые распологаются в одной строке, объединены в горизонтальную цепочку и выровнены по всей ширине родителя при помощи атрибута layout_constraintHorizontal_weight в соотношении 1:1, также присутствуют небольшие отступы для лучшей наглядности.

Макет создан при помощи языка разметки XML, вот исходный текст макета:

А теперь к самой сути проблемы. Передо мной стоит цель поменять первые 2 кнопки местами (b_button1 и b_button2, которые находятся в одной строке), при этом сохранив их привязки, включая горизонтальную цепочку (chain) и такие же исходные размеры. В процессе программной перепривязки столкнулся с тем, что у меня перестал работать атрибут weight, при помощи которого я выравнивал размер кнопок по всей ширине родителя. Как только не крутил код, но кнопки сначала вообще улетали за экран, а теперь никак не хотят менять свой размер и приобретают ширину в зависимости от своего содержимого, что мне абсолютно не подходит. Подскажите, пожалуйста, что я делаю не так? Привожу часть исходного текста программы, чтобы было понятно, что я пытаюсь сделать:

P.S. Должно быть так: missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

А получается вот так: missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Источник

Android studio missing classes (Constraint Layout) (has been resolved)

Android studio missing classes. The layout is blank. missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Main.Activity is red letters.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

[Soultion in the answer area]

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

4 Answers 4

add this line under dependencies in your build.gradle file

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

If Android Studio is not identifying the project as Gradle based, it means you imported the project source code from wrong directory. Try to reimport the project from a directory where you have see build.gradle file.

Or if you are using AndroidX

You need to use different build artifacts

Refer here for AndroidX Migrating to AndroidX

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

First,I delete Android Studio,and then Download Android Studio(include emulator and SDK) again.

Second,I change the name of my homework.

Third,I choose «Open an existing Android project».

Forth, Gradle Scripts->build.gradle->

Not the answer you’re looking for? Browse other questions tagged android or ask your own question.

Related

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.9.17.40233

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник

Работа с ConstraintLayout через XML-разметку

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Привет! Меня зовут Гавриил, я Android-лид Touch Instinct.

В марте Google выкатил релизное обновление ConstraintLayout. Презентовали его еще на прошлом Google I/O. С того момента прошел почти год, ConstraintLayout стал лучше, быстрее и оброс новыми возможностями. Например, приятно, что появилась возможность объединения элементов в цепи — это позволяет использовать ConstraintLayout вместо LinearLayout.

О всех новых и старых возможностях ConstraintLayout я и постараюсь рассказать в этой статье. Предупрежу сразу — статья будет длинная и других семи частей не будет. Про визуальный редактор ConstraintLayout в статье не будет ни слова — только XML-разметка (по старинке) и немного кода.

Навигация:

Добавляем в проект

Теперь можно использовать ConstraintLayout у себя в проекте:

Constraints. Привязываем элементы друг к другу

Constraints — это линии, на основе которых располагается view внутри ConstraintLayout. Constraints могут быть привязаны к сторонам самого ConstraintLayout или к сторонам других view внутри ConstraintLayout. Constraints можно разделить на вертикальные и горизонтальные.

Вертикальное и горизонтальное constraints друг с другом не связаны.

Напомню, что Baseline — это линия выравнивания контента элемента. Пример — для TextView это линия строки, на которой пишется текст. Если у view выставлен Baseline сonstraint, то базовая линия элемента будет находиться на уровне базовой линии view, к которой привязан сonstraint.

Общий формат атрибутов для привязки сonstraint выглядит следующим образом:

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Основные правила привязки сторон:

Задаем размеры View

Размер view могут быть указан, как (на примере высоты):

Важно! Указывать размер match_parent или fill_parent запрещено. Чтобы размер view совпадал с размерами ConstraintLayout, достаточно просто привязать constraints к сторонам ConstraintLayot и использовать размер match_constraint_spread.

Если указан размер match_constraint_wrap или match_constraint_spread, стоит учесть, что:

Для других типов размеров стоит учитывать, что:

Задаем размеры View на основе соотношения сторон

Значение в layout_constraintDimensionRatio учитывается при расчете размеров view, только если хотя бы одна из сторон выставлена в match_constraint_wrap или match_constraint_spread.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Выставляем относительное расположение View внутри ConstraintLayout

Если у view привязать два горизонтальных constraints, то ей можно выставить горизонтальное относительное расположение. То же применимо и для вертикальных constraints.

Теперь, например, выставим значение 0.3. Это будет означать, что 30% не заполненного view места будет слева от view, а 70% — справа. Если же размер view больше размера расстояния между constraints, то 30% выходящего за constraints размера будет слева от ограничений, а 70% — справа.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Небольшое важное замечание: если в манифесте выставлена поддержка RTL языков, то layout_constraintHorizontal_bias вместо «слева» будет располагать элементы «от начала», а вместо «справа» — «от конца». То есть тем, кто поддерживает RTL языки стоит учитывать, что явно выставить расположение «слева» и «справа» не выйдет. По крайней мере, я такой возможности не нашел.

Особенности привязки линий

После презентации ConstraintLayout его часто сравнивали с RelativeLayout. Но, на самом деле, у них принципиально разные расчеты расположения элементов. В RelativeLayout у view просто указывается, с какой стороны другой view ей нужно находиться — «слева от», «справа от» и т.д. В ConstraintLayout constraints привязываются к сторонам других views и расположение view зависит от того, как ее constraints будут рассчитаны.

Для расположения constraint сперва рассчитывается расположение view, к которой этот constraint привязан. А для расположения view сперва рассчитываются все указанные для нее constraints. Циклические зависимости view и constraints при этом запрещены, так что, фактически, внутри ConstraintLayout строится направленный ациклический граф зависимостей constraints от view и view от constraints. Все расчеты производятся последовательно, начиная от не зависимых элементов графа.

Для простоты советую разделять вертикальные и горизонтальные зависимости на две независимые группы, как-будто внутри ConstraintLayout строится отдельно граф вертикальных зависимостей и отдельно — горизонтальных.

Но, вообще говоря, стоит понимать, что вертикальные параметры view, косвенно, могут зависеть от горизонтальных параметров другой view. Пример — расчет размера на основе соотношения сторон: при изменении ширины view меняется и ее высота. То есть, если у view изменится ширина из-за изменений ее горизонтальных constraints, то высота view тоже изменится.

Теперь рассмотрим любопытный пример расчета вертикальных constraints:

Результат:
missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

View A просто привязан к левой и верхней сторонам ConstraintLayout, то есть находится слева сверху.

По горизонтальному расположению вопросов возникнуть не должно. Теперь объясню вертикальное расположение.

Последовательность вертикальных расчетов:

Результаты вертикальных расчетов:

В общем, на мой взгляд, такой алгоритм расчета стоит учитывать, чтобы понимать, где будет располагаться view в конечном счете.

Особенности привязки по Baseline

View, привязанная по Baseline, не может быть ограничена сверху и снизу, то есть Top и Bottom constraints будут игнорироваться. Это значит, что для такой view нельзя выставить размер match_constraint_spread или match_constraint_wrap.

Из этого не совсем очевидно следует, что по Baseline стоит привязывать невысокие view к высоким. Иначе есть шанс, что высокая view выйдет за рамки ConstraintLayout или размер ConstraintLayout будет рассчитан неверно.

Пример некорректной Baseline-привязки:

Результат:
missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Базовая линия большой TextView привязана к базовой линии малой TextView (в зеленой рамке), так что текст находится на одной линии.

При этом большая TextView выходит за рамки ConstraintLayout.

Создаем цепи (chains)

Стиль цепи и его параметры берутся из атрибутов головного элемента цепи — самого левого, начального или самого верхнего.

Стиль spread

Элементы цепи распределяются равномерно, то есть отступы между элементами и от элементов до границ цепи будут одинаковые. Используется по умолчанию;

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Стиль spread_inside

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Стиль packed

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить
missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Стиль weighted

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Указываем отступы с учетом скрытых элементов

Отступы указываются стандартными атрибутами layout_margin , где X — сторона отступа ( Left/Right/Top/Bottom/Start/End ). Эти отступы применяются к линиям привязки элемента, а не к сторонам элемента. Это значит, что линия привязки будет с отступом от стороны, к которой она привязана.

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Разбираемся с Guidelines

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

Расположение guideline контролируется тремя атрибутами:

missing constraints in constraint layout как исправить. Смотреть фото missing constraints in constraint layout как исправить. Смотреть картинку missing constraints in constraint layout как исправить. Картинка про missing constraints in constraint layout как исправить. Фото missing constraints in constraint layout как исправить

Настраиваем параметры ConstraintLayout из кода

Создать этот ConstraintSet можно тремя способами:

Описание методов для изменения ConstraintSet можно посмотреть в документации (их очень много).

Коротко об анимации

Стоит ли пользоваться ConstraintLayout?

В компании Touch Instinct мы собираемся, как минимум, попробовать этот компонент. Особенно интересно посмотреть, как он поведет себя при использовании в ячейках RecyclerView — там часто изменяются значения элементов, что обычно приводит к пересчету расположения элементов в ячейке и иногда пересчету ее размера.

Разработчики Google проделали большую работу и у ConstraintLayout есть все шансы стать стандартным при разработке элементом UI, какими стали те же RecyclerView и CoordinatorLayout.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *