Подробное объяснение и примеры Android ConstraintLayout

предисловие

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

Все функции ConstraintLayout доступны непосредственно через визуальные инструменты редактора макетов, поскольку API макетов и редактор макетов созданы специально друг для друга. Поэтому вы можете использовать ConstraintLayout для создания макетов путем перетаскивания вместо изменения XML.


1. Объяснение атрибутов ConstraintLayout

Давайте кратко рассмотрим некоторые из основных атрибутов ориентации, которые нам нужно использовать при использовании ConstraintLayout, как показано в следующей таблице:

Атрибуты описывать
приложение: layout_constraintLeft_toLeftOf Поместите левую сторону A на левую сторону B (с выравниванием по левому краю)
приложение: layout_constraintLeft_toRightOf Поместите левую сторону A на правую сторону B (выровняв по левому краю относительно правого)
приложение: layout_constraintRight_toLeftOf Поместите правую сторону A на левую сторону B (выровняйте правую сторону относительно левой)
приложение: layout_constraintRight_toRightOf Поместите правую сторону A на правую сторону B (выравнивание по правому краю)
приложение: layout_constraintTop_toTopOf Поместите верхнюю сторону A на верхнюю сторону B (выравнивание по верхнему краю).
приложение: layout_constraintTop_toBottomOf Поместите верхнюю сторону A на нижнюю сторону B (выровняйте верхнюю часть по отношению к нижней)
приложение: layout_constraintBottom_toTopOf Поместите нижнюю сторону A на верхнюю сторону B (выровняйте нижнюю часть относительно верхней)
приложение: layout_constraintBottom_toBottomOf Поместите нижнюю сторону A на нижнюю сторону B (выравнивание по нижнему краю).
приложение: layout_constraintStart_toEndOf Поместите начальную позицию A в конечную позицию B (начальная позиция выровнена с конечной позицией)
приложение: layout_constraintStart_toStartOf Поместите начальную позицию A в начальную позицию B (начальная позиция выровнена)
приложение: layout_constraintEnd_toStartOf Поместите конечную позицию A в начальную позицию B (конечная позиция выровнена с начальной позицией)
приложение: layout_constraintEnd_toEndOf Поместите конечную позицию A в конечную позицию B (конечная позиция выровнена)
приложение: layout_constraintBaseline_toBaselineOf Поместите нижнюю сторону A на верхнюю сторону B (выравнивание базовой линии)

Примечание. Пространство имен атрибута — app

2. Предвзятость

При использовании LinearLayout мы обычно используем Gravity для горизонтального или вертикального расположения элементов управления в соответствии с распределением веса. В ConstraintLayout он предоставляет атрибут смещения для назначения весов элементам управления.

Код выглядит следующим образом (пример):

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

       <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:text="A"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.25"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
Атрибуты описывать
приложение: layout_constraintHorizontal_bias Коэффициент горизонтального смещения
приложение: layout_constraintVertical_bias Коэффициент вертикального смещения

3. GONE на самом деле не GONE

Когда мы используем RelativeLayout для разработки, мы часто сталкиваемся с такой логикой: когда определенные данные пусты, элемент управления, привязанный к данным, ИСЧЕЗАЕТ. Тогда будет такая проблема.Например,есть три контрола А,В и С расположенные вертикально.В находится ниже А, а С ниже В.После того как В спрячется (GONE), так как С не имеет зависимости от А, это вызовет ошибку страницы. ConstraintLayout дает хорошее решение этой проблемы. В ConstraintLayout, если элемент управления скрыт (GONE), он станет точкой, поэтому он по-прежнему оказывает влияние на другие элементы управления, которые используют этот элемент управления в качестве эталонного элемента управления.

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

Атрибуты описывать
приложение: layout_goneMarginLeft Скрыть левое поле элемента управления
приложение: layout_goneMarginRight Скрыть правое поле элемента управления
приложение: layout_goneMarginTop Скрыть верхнее поле элемента управления
приложение: layout_goneMarginBottom Скрыть нижнее поле элемента управления
приложение: layout_goneMarginStart скрыть начальное поле элемента управления
приложение: layout_goneMarginEnd скрыть конечное поле элемента управления

4. Соотношение сторон

1. Соотношение сторон View

В ConstraintLayout ширина также может быть определена как отношение высоты, или высота может быть определена как отношение ширины. Прежде всего, вам нужно установить ширину или высоту на 0 dp (то есть MATCH_CONSTRAINT), чтобы адаптироваться к ограничениям. Затем установите соотношение через свойство layout_constraintDimensionRatio . Это отношение может быть числом с плавающей запятой, представляющим соотношение между шириной и высотой, а также отношением формы «ширина:высота».

Код выглядит следующим образом (пример):

<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:layout_width="wrap_content"
        android:layout_height="0dp"
        android:text="-------------------宽高比2:1-------------------"
        app:layout_constraintDimensionRatio="2:1"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>
</android.support.constraint.ConstraintLayout>

Здесь высота кнопки установлена ​​равной половине ширины. Как показано ниже:
вставьте сюда описание изображения

Если для ширины и высоты задано значение 0dp (MATCH_CONSTRAINT), то к значению layout_constraintDimensionRatio необходимо добавить «Ш, ширина: высота» или «В, ширина: высота», чтобы указать ширину ограничения или высоту, код выглядит следующим образом:

<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:layout_width="0dp"
        android:layout_height="0dp"
        android:text="Button1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintDimensionRatio="h,10:6"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

</android.support.constraint.ConstraintLayout>

Визуализации следующие:
вставьте сюда описание изображения

2. Просмотр процентной ширины и высоты

ConstraintLayout также может использовать проценты для установки ширины и высоты представления.Чтобы использовать ширину или высоту в процентах, необходимо установить значение 0dp (т. е. MATCH_CONSTRAINT).
Затем установите следующие свойства:

app:layout_constraintWidth_default="percent" //设置宽为百分比 
app:layout_constraintWidth_percent="0.3" //0到1之间的值
app:layout_constraintHeight_default="percent" //设置高为百分比 
app:layout_constraintHeight_percent="0.3" //0到1之间的值

5. Атрибут Fuxing-Chain сложной компоновки

Цепочка цепочек — это специальное ограничение, которое позволяет представлениям, связанным несколькими цепочками цепочек, поровну делить оставшееся пространство.Наиболее похожей функцией в традиционном макете Android должно быть соотношение весов в LinearLayout, но цепочка цепочек может делать гораздо больше, чем функция соотношения весов. Если мы хотим реализовать структуру цепочки между элементами управления, мы можем установить отношение взаимного ограничения между этими элементами управления и выбрать создание горизонтальной цепочки или вертикальной цепочки на основе этих отношений.

Официальный предоставляет в общей сложности 5 стилей цепочек:
вставьте сюда описание изображения

Мы можем установить его следующим образом:

app:layout_constraintHorizontal_chainStyle="spread|spread_inside|packed"
或者
app:layout_constraintVertical_chainStyle="spread|spread_inside|packed"

Здесь нужно отметить следующее: установите chainStyle для первого компонента Chain, не забудьте запомнить

1. Параметры и значения атрибутов

Для типа атрибута Chian существует два типа: горизонтальное направление (Horizontal) и вертикальное направление (Vertical).

Атрибуты описывать
приложение: layout_constraintHorizontal_chainStyle Цепь в горизонтальном направлении
приложение: layout_constraintVertical_chainStyle Цепь в вертикальном направлении

Всего для режима атрибута Цепочка существует три типа: спред, спред_внутри и упакованный.

2. Режим цепочки распространения

Режим распространения распределяет пространство равномерно, и каждый вид занимает свое собственное пространство, разделенное поровну.Это режим по умолчанию для атрибута «Цепочка».

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

Атрибуты описывать
приложение: layout_constraintVertical_weight вертикальный контрольный груз
приложение: layout_constraintHorizontal_weight Вес элемента управления в горизонтальном направлении

Через настройку веса, как показано на рисунке:
вставьте сюда описание изображения

3. Режим спреда внутри цепочки

Режим расширения внутри основан на Spread, удаляя расстояние от двух самых краевых View с обеих сторон до края внешнего родительского компонента, а затем позволяя оставшимся Views поровну делить пространство внутри оставшегося пространства.

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

4. Режим упакованной цепи

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

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

5. Пример настройки цепочки в XML

Установка свойства Chain должна обеспечить два условия:

  • Задайте ограничения цепочки chain
  • Установите chainStyle для первого компонента Chain.
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button16"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintEnd_toStartOf="@+id/button17"
        app:layout_constraintVertical_chainStyle="packed"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="39dp" />

    <Button
        android:id="@+id/button17"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintEnd_toStartOf="@+id/button18"
        app:layout_constraintStart_toEndOf="@+id/button16"
        tools:layout_editor_absoluteY="39dp" />

    <Button
        android:id="@+id/button18"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/button17"
        tools:layout_editor_absoluteY="39dp" />
</android.support.constraint.ConstraintLayout>

6. Использование направляющей линии

GuideLine — это просто класс инструментов, используемый в макете ConstraintLayout для помощи в макете, подобно вспомогательной линии, вы можете установить атрибут android:orientation, чтобы определить, является ли он горизонтальным или вертикальным.
Важно то, что Руководство не будет отображаться в интерфейсе, а значение по умолчанию ИСЧЕЗЛО.

направление описывать
андроид:ориентация направление

После создания GuideLine мы можем установить начальное положение направляющей:

весовой атрибут описывать
приложение: layout_constraintGuide_begin Принимая начальное положение View в качестве эталонного объекта, верхнюю границу в горизонтальном или вертикальном направлении (dp)
приложение: layout_constraintGuide_end Принимая конечное положение View в качестве опорного объекта, верхнюю границу в горизонтальном или вертикальном направлении (dp)
приложение: layout_constraintGuide_percent Процент в горизонтальном или вертикальном направлении (коэффициент плавучести 0,0f - 1,0f)

Подведем итог

Свойства всего ConstraintLayout были объяснены, давайте использовать ConstraintLayout для обучения в Android!

Supongo que te gusta

Origin blog.csdn.net/klylove/article/details/121967701
Recomendado
Clasificación