ConstraintLayout против "традиционных" макетов

Мне просто интересно, когда выбрать CoordinatorLayout над "традиционными" макетами или они (или, по крайней мере, некоторые из них) будут устаревать?

Вопрос ConstraintLayout vs. CoordinatorLayout уже показал мне, что координаторLayout по-прежнему имеет право на существование. Я бы предположил, что FrameLayout по-прежнему является лучшим выбором, чем ConstraintLayout, когда есть только один дочерний вид.

Но как насчет других макетов?

Я лично так привык писать макеты вручную в xml, поэтому переход на ConstraintLayout для меня очень тяжелый. Более того, ответы на эти вопросы меня действительно интересуют:

Имеет ли ConstraintLayout лучшую производительность, чем вложенный макет? Если это так, в какой момент это происходит (какой уровень вложенности)?

Ответ 1

Мне просто интересно, когда выбрать CoordinatorLayout над "Традиционные" макеты или они (или, по крайней мере, некоторые из них) собираются быть устаревшим?

Так что ConstraintLayout полезен, но (пока) он не требуется для разработки приложений Android, любой более чем LinearLayout и RelativeLayout. И поскольку ConstraintLayout является библиотеки, вам нужно будет предпринять дополнительные шаги, чтобы добавить его в свой проект (артефакт com.android.support.constraint:constraint-layout в вашем закрытие зависимостей ваших модулей build.gradle file), и это добавляет ~ 100 КБ к размеру вашего приложения для Android.

Я лично так привык писать макеты вручную в xml, поэтому переход на ConstraintLayout для меня очень тяжелый.

Перетащить GUI-конструктор

Google пытается упростить жизнь разработчикам и заставить их работать быстрее и продуктивнее, поэтому они продолжают улучшать построитель GUI drag-drop. Однако жесты перетаскивания, разработчик только предоставляя вам координаты X/Y виджета, основанные на том, где разработчик отпускает кнопку мыши и завершает капли. С LinearLayout добавление виджета очень просто. С помощью RelativeLayout для GUI-контроллера трудно справиться с перетаскиванием, и, вероятно, вам придется копать внутри XML-кода, чтобы все было сделано. ConstraintLayout был создан с учетом GUI, чтобы сделать его немного легче выведите правильные правила, основанные на том, где разработчик удаляет виджет.

Рекомпиляция размера и положения

Изменение деталей виджета часто вызывает размеры должны быть пересчитаны. Например, изменение в TextView может чтобы целая иерархия проходила работу по перераспределению/повторной позиции. Если у вас есть контейнер внутри контейнера, который находится внутри другого контейнера и т.д., Это означает, что родители изменяют размер/переопределение своих детей, и это может быть очень дорогой для глубоких иерархий. Так

Есть ли у ConstraintLayout более высокая производительность, чем вложенная Компоновка?

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

Да,

для более подробной информации вы можете ознакомиться в книге о развитии Android от CommonsWare. Там, где использование ConstraintLayout объясняется более подробно с примерами сравнения с другими контейнерами, такими как LinearLayout, RelativeLayout и т.д. Действительно, анатомия развития андроида.

Ответ 2

Я бы предположил, что FrameLayout по-прежнему лучший выбор, чем ConstraintLayout, когда есть только один дочерний вид.

Я думаю, что сила ConstraintLayout действительно имеет место, когда вы выходите за рамки простых макетов. Я думаю, что цель (по крайней мере для меня) заключается в том, чтобы максимально сгладить ваш сложный макет. Используя полный набор справок ConstraintLayout, таких как невидимые ограничения, такие как Guideline и Barrier, для указания вертикального/горизонтального layout_constraintVertical_bias и просмотра распределений с помощью layout_constraintVertical_chainStyle.

Если у вас сложный вид с вложенными ViewGroup s, начните использовать ConstraintLayout.

Я лично так привык писать макеты вручную в xml, поэтому переход на ConstraintLayout для меня очень тяжелый.

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

Еще одна причина использования ConstraintLayout: отличный способ реализовать анимацию без слишком большого количества ручного кодирования с помощью ConstraintSet. Какой-то отличный пример: https://robinhood.engineering/beautiful-animations-using-android-constraintlayout-eee5b72ecae3

Ответ 3

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

Вы можете проверить этот ответ, который говорит о различиях между ConstraintLayout и RelativeLayout

Ответ 4

Я постараюсь ответить на ваши вопросы. И я предполагаю, что вы говорите о макетах в разработке Android.

Во-первых, вы все еще можете использовать все макеты Relative, Linear, Frame и т.д. Они еще не амортизируются платформой Android. По своему опыту я знаю, что ConstrainLayout немного сложно кодировать вручную в xml, но если вы используете макет ограничений, Android Studio предоставляет довольно интересные инструменты для "перетаскивания". Инструменты могут практически выполнять то, что вы обычно делаете в XML, вручную. Кроме того, они очень продуктивны и экономят много вашего времени.

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

Я настоятельно рекомендую просмотреть официальную документацию Android для получения дополнительной ссылки в следующей ссылке.

https://developer.android.com/training/constraint-layout/