Различия между ConstraintLayout и RelativeLayout

голоса
126

Я смущен о разнице между ConstraintLayout и RelativeLayout. Может кто-то пожалуйста, скажите мне точные различия между ними?

Задан 19/05/2016 в 11:09
источник пользователем
На других языках...                            


11 ответов

голоса
97

Намерение ConstraintLayoutсостоит в оптимизации и придавить иерархию вида ваших макетов, применяя некоторые правила для каждого вида , чтобы избежать вложенности.

Правила напомнить вам RelativeLayout, например , установка левой слева от какой - то другой точки зрения.

app:layout_constraintBottom_toBottomOf="@+id/view1"

В отличие RelativeLayout, ConstraintLayoutпредлагает biasзначение, которое используется для позиционирования вид в плане 0% и 100% горизонтальное и вертикальное смещение относительно ручки (со значком круга). Эти проценты (и фракция) предлагают бесшовное позиционирование вида на различную плотность экрана и размерах.

app:layout_constraintHorizontal_bias="0.33" <!-- from 0.0 to 1.0 -->
app:layout_constraintVertical_bias="0.53" <!-- from 0.0 to 1.0 -->

Исходная ручка (длинная труба с закругленными углами, ниже окружность ручки) используются для выравнивания содержимого с другим видом ссылки зрения.

Квадратные ручки (на каждом углу зрения) используются для изменения размера представления в дпс.

введите описание изображения здесь

Это совершенно мнение, основанное и мое впечатление ConstraintLayout

Ответил 19/05/2016 в 13:29
источник пользователем

голоса
30

Сообщил @davidpbr производительности ConstraintLayout

Я сделал два подобных 7-ребенок макеты, по одному с родителем ConstraintLayout и RelativeLayout. На основе Android Studio инструмента отслеживания метод, он появляется ConstraintLayout больше времени проводит в onMeasure и выполняет дополнительную работу в onFinishInflate.

Библиотека используется (поддержка-v4, AppCompat-v7, ...):

'Com.android.support.constraint: ограничение-макет: 1.0.0-альфа1'

Устройства / Android версии воспроизведен на: Samsung Galaxy S6 (SM-G920A К сожалению, нет Nexus атм.). Android 5.0.2

Краткое сравнение трассировки метода:

1

Пример Github репозиторий https://github.com/OnlyInAmerica/ConstraintLayoutPerf

Ответил 30/07/2016 в 06:51
источник пользователем

голоса
13

Большая разница в том, что ConstraintLayout уважает ограничения, даже если вид исчезает. Поэтому он не будет нарушать макет, если у вас есть сеть, и вы хотите, чтобы сделать вид исчезнуть в середине.

Ответил 24/12/2016 в 15:27
источник пользователем

голоса
9

Ниже приведены отличия / преимущества:

1) Ограничение Макет имеет двойное мощность как относительную Layout, а также линейный макет: Установить относительные позиции представлений (как относительная макете), а также устанавливает веса для динамического пользовательского интерфейса (который был единственно возможным в линейном Layout).

2) Очень мощное использование группировка элементов пути формирования цепочки. Таким образом, мы можем сформировать группу взглядов, которые в целом могут быть размещены в желаемом направлении без добавления другого слоя иерархии просто, чтобы сформировать еще одну группы взглядов.

3) В дополнение к весов, мы можем применить горизонтальное и вертикальное смещение, которое не что иное, как процент смещения от центра. (Смещение 0,5 означает центрально выровнено. Любое значение меньше или больше средств, соответствующих движению в соответствующем направлении).

4) Еще одна очень важная особенность в том , что она уважает и обеспечивает функциональные возможности для обработки пропавшего представления , так что макеты не сломаться , если какие - то вид установлен на пережившей Java кода. Больше можно найти здесь: https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html#VisibilityBehavior

5) обеспечивает мощность автоматического ограничения применения при использовании Синей печати и визуального инструмента Редактора, который позволяет легко создать страницу.

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

Вот лучшее место , чтобы узнать быстро: https://codelabs.developers.google.com/codelabs/constraint-layout/#0

Ответил 20/09/2017 в 19:19
источник пользователем

голоса
4

В дополнение к @ Dhaval-дживани ответ.

Я обновил проект GitHub проект до последней версии ограничения макета v.1.1.0-бета3

Я измерил и сравнил время способа и времени OnCreate между началом и концом OnCreate исполнения последнего метода preformDraw который видимого на мониторе процессора. Все испытания были сделаны на Samsung S5 мини с андроид 6.0.1 Вот результаты:

Новый старт (первое открытие экрана после запуска приложения)

Относительный Layout

OnCreate: 123ms

Последний раз preformDraw - OnCreate время: 311.3ms

Constraint Layout

OnCreate: 120.3ms

Последний раз preformDraw - OnCreate время: 310ms

Кроме того, я проверил тест производительности из этой статьи , здесь код и обнаружил , что на контуре насчитывает менее 100 вариант компоновки ограничения быстрее во время выполнения накачивания, измерения и расположение затем вариантами с относительным макетом. А на старых устройствах Android, как Samsung S3 с Android 4.3, разница больше.

В заключении я согласен с замечаниями статей :

Стоит ли реорганизовать старые взгляды переключиться на него с RelativeLayout или LinearLayout?

Как всегда: Это зависит

Я бы ничего не реорганизовывать, если вы либо не имеют проблемы с производительностью вашей текущей иерархии макета или вы хотите, чтобы внести существенные изменения в макете в любом случае. Хотя я не измерял его в последнее время, я не нашел каких-либо проблем с производительностью в последних выпусках. Так что я думаю, что вы должны быть безопасными, чтобы использовать его. но - как сказал I'v - не просто мигрируют ради миграции. Только делать это, если есть необходимость и пользу от него. Для новых макетов, хотя, я почти всегда использую ConstraintLayout. Это намного лучше, по сравнению с тем, что было раньше.

Ответил 15/11/2017 в 18:50
источник пользователем

голоса
3

Реальный вопрос, чтобы спросить, есть ли какая-либо причина использовать любой макет, кроме макета ограничения? Я считаю, что ответ может быть нет.

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

Ограничения макеты лучше во всех отношениях (они стоят, как 150k в размере APK.). Они быстрее, они легче, они более гибкие, они лучше реагируют на изменения, они исправляют проблемы, когда элементы уходят, они соответствуют лучше радикально различным типам экранов и они не используют кучу вложенных циклов с этим долго вытягивается древовидной структура для всего. Вы можете положить что-нибудь где-нибудь, в отношении к чему-либо, в любом месте.

Они были немного поддатый еще в середине 2016 года, где визуальный макет редактор просто не был достаточно хорош, но они к тому, что если у Вас есть макет на всех, вы можете серьезно рассмотреть вопрос об использовании макета ограничений, даже когда он делает то же самое, как RelativeLayout, или даже простой LinearLayout. FrameLayouts явно до сих пор их назначение. Но, я не могу видеть ничего другого на этом этапе строительства. Если бы они начали с этим они не добавили бы что-нибудь еще.

Ответил 29/05/2017 в 05:17
источник пользователем

голоса
2

[ Относительная Расположение и ограничения макета свойства, эквивалентные [Относительная Компоновка и Constraint свойства макета эквивалентные]

Ответил 10/07/2018 в 09:45
источник пользователем

голоса
2

Официально, ConstraintLayoutэто намного быстрее

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

Ответил 14/11/2017 в 15:47
источник пользователем

голоса
1

Процесс рисования Android View включает в себя 3 этапа. Вы можете найти соответствующие методы, когда продолжаетсяViewGroup

  • Мера
  • раскладка
  • Привлечь

Используя инструмент Systrace мы можем вычислить меру / расположение

Systrace для варианта компоновки, который использует RelativeLayout введите описание изображения здесь

Systrace для варианта компоновки, который использует ConstraintLayout введите описание изображения здесь

Разница в производительности ( с использованием OnFrameMetricsAvailableListener , что позволяет собрать кадр за кадром информации о визуализации пользовательского интерфейса вашего приложения синхронизации)

ConstraintLayout выполняет около 40% лучше в фазе мера / макета, чем RelativeLayout

введите описание изображения здесь

И последнее , но не в последнюю очередь ConstraintLayoutэто современный способ построения ответственного пользовательского интерфейса, он постоянно развивается, и каждый релиз приносит интересные функции , которые делают жизнь проще. Последний является Constraint Layout 1.1

Пожалуйста, прочитайте больше:

https://constraintlayout.com/

https://android-developers.googleblog.com/2017/08/understanding-performance-benefits-of.html

https://medium.com/google-developers/building-interfaces-with-constraintlayout-3958fa38a9f7

Ответил 25/04/2018 в 14:57
источник пользователем

голоса
0

Заключение Я могу сделать это

1) Мы можем сделать дизайн пользовательского интерфейса , не касаясь XML часть кода, чтобы быть честным , я чувствую Google скопировал как пользовательский интерфейс разработан в IOS приложений , даже намного лучше, будет иметь смысл , если вы знакомы с разработкой пользовательского интерфейса в IOS, но в относительном макете его трудно установить ограничение , не касаясь дизайном XML .

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

3) Кроме того , есть дополнительные вещи , кроме того , что относительное расположение имеет, например, круговое относительное позиционирование , где мы можем расположить другой вид по отношению к этому в определенном радиусе с определенным углом , который не может сделать в относительном макете

Я говорю снова проектирование пользовательского интерфейса с использованием макет ограничения такого же, как разработка пользовательского интерфейса в IOS, так и в будущем, если вы работаете на прошивке вы можете понять вещи в проектировании UI легко

Ответил 30/05/2018 в 14:16
источник пользователем

голоса
0

Единственное различие я уже отметил, что все установлено в относительном макете с помощью перетаскивания автоматически их размеров относительно других элементов, выведенных, так что, когда вы запустите приложение, что вы видите, что вы получите. Однако в макете ограничения, даже если перетащить элемент с точки зрения дизайна, когда вы запустите приложение вещи могут быть сдвинуты вокруг. Это можно легко исправить, установив вручную ограничения или, более рискованный шаг в том, чтобы щелкнуть правой кнопкой мыши элемент в дереве компонентов, выбрав в подменю ограничения макета, а затем нажмите "вывести ограничения. Надеюсь это поможет

Ответил 02/06/2017 в 20:33
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more