Компонент LayoutGroup в библиотеке PlayCanvas
представляет собой контейнер для элементов пользовательского интерфейса,
который помогает управлять расположением дочерних элементов в
определённом порядке. Этот компонент широко используется для создания
гибких интерфейсов, где положение элементов автоматически регулируется в
зависимости от размера и структуры контейнера.
type Определяет тип компоновки. Он
может быть одного из следующих:
Horizontal — элементы размещаются
горизонтально (в одну строку).Vertical — элементы размещаются
вертикально (в один столбец).Grid — элементы размещаются в виде
сетки.padding Свойство, которое
определяет внутренние отступы между элементами внутри контейнера. Может
быть задано в виде объекта, где каждый параметр отвечает за
соответствующую сторону: top, right,
bottom, left.
spacing Задает расстояние между
элементами. Это значение может быть положительным (для увеличения
промежутков) или отрицательным (для сжатия элементов).
fitWidth Если активировано, то
контейнер автоматически изменяет свою ширину в зависимости от
содержимого.
fitHeight Аналогично
fitWidth, но применяется к высоте контейнера.
alignment Определяет выравнивание
дочерних элементов внутри контейнера. Можно задать выравнивание по
центру, слева, справа или по другим направлениям, в зависимости от типа
компоновки.
wrap Включает или отключает
автоматическое переноса элементов в случае нехватки места.
var layoutGroup = new pc.Entity();
layoutGroup.addComponent('layoutgroup', {
type: 'Vertical',
padding: { top: 10, right: 10, bottom: 10, left: 10 },
spacing: 15
});
var child1 = new pc.Entity();
var child2 = new pc.Entity();
layoutGroup.addChild(child1);
layoutGroup.addChild(child2);
app.root.addChild(layoutGroup);
В этом примере создаётся вертикальный контейнер с отступами и расстоянием между дочерними элементами. Каждый дочерний элемент будет размещён в контейнере с учётом настроек отступов и расстояний.
Компонент LayoutChild используется для определения, как
отдельный элемент будет вести себя внутри контейнера, использующего
LayoutGroup. Этот компонент помогает гибко настраивать
поведение дочерних объектов в зависимости от их положения в контейнере и
особенностей компоновки.
flexOrder Указывает порядок, в
котором элементы будут размещаться в контейнере, если это необходимо.
Обычно используется в сочетании с другими параметрами, чтобы установить
приоритет размещения.
flexGrow Определяет, как дочерний
элемент будет расти, чтобы заполнить доступное пространство. Если
установлено значение больше 0, элемент будет увеличиваться в размере,
чтобы заполнить контейнер, пропорционально оставшемуся
пространству.
flexShrink Задаёт коэффициент
сжатия элемента при уменьшении размера контейнера. Чем выше значение,
тем быстрее элемент будет сжиматься.
flexBasis Указывает начальную
величину, с которой будет начинаться размер элемента. Это свойство
используется для контроля базового размера элементов в контейнерах с
гибким расположением.
alignment Задаёт выравнивание
дочернего элемента внутри контейнера относительно других элементов. Это
выравнивание может быть разным в зависимости от компоновки
контейнера.
stretch Если установлено значение
true, элемент будет растягиваться по всей доступной оси
(горизонтальной или вертикальной) в зависимости от типа компоновки
контейнера.
var layoutChild = new pc.Entity();
layoutChild.addComponent('layoutchild', {
flexGrow: 1,
flexBasis: 100
});
layoutGroup.addChild(layoutChild);
В этом примере дочерний элемент будет расти, чтобы занять доступное пространство в контейнере, а также иметь начальную ширину в 100 пикселей.
Контейнеры LayoutGroup и компоненты
LayoutChild тесно связаны между собой. Контейнер управляет
общим расположением элементов, а компоненты LayoutChild
дают возможность настроить их индивидуальное поведение. Таким образом,
при проектировании интерфейса важно учитывать оба компонента для того,
чтобы достичь гибкости и нужной структуры.
Динамическое изменение размеров При изменении
размеров контейнера дочерние элементы с компонентом
LayoutChild будут автоматически адаптироваться к новым
условиям, используя свойства flexGrow,
flexShrink и flexBasis.
Реактивность интерфейса Если необходимо, чтобы интерфейс адаптировался к изменениям размера экрана или изменению размеров окна, можно использовать комбинацию этих компонентов для создания отзывчивых интерфейсов.
Сеточные компоновки Для сложных интерфейсов, где
элементы должны быть размещены в сетке, компонент
LayoutGroup с типом Grid помогает организовать
элементы в виде таблицы, а LayoutChild даёт возможность
настроить поведение каждого элемента в этой таблице, включая его
растяжение, выравнивание и порядковый номер.
Производительность Хотя компоненты
LayoutGroup и LayoutChild полезны для быстрого
прототипирования и разработки интерфейсов, они могут оказывать влияние
на производительность при большом количестве элементов. Чтобы уменьшить
нагрузку на систему, важно избегать слишком сложных вложенных структур с
большим числом компонентов.
Использование с динамическим контентом Если
интерфейс включает в себя динамически добавляемые или изменяющиеся
элементы, важно обновлять компоненты LayoutGroup и
LayoutChild по мере необходимости. Например, при добавлении
нового элемента в контейнер может потребоваться перерисовать его или
перерасчитать размеры.
Пользовательский интерфейс для мобильных
устройств Для мобильных приложений, где размеры экрана
варьируются, компоненты LayoutGroup и
LayoutChild предоставляют отличные возможности для
реализации отзывчивых интерфейсов, которые подстраиваются под различные
разрешения экрана.
Эти компоненты библиотеки PlayCanvas позволяют создать гибкую и удобную структуру для интерфейсов, которая будет адаптироваться под различные устройства и размеры экранов.