Компоновщики (также называемые макетами или контейнерами) Layouts используются для управления отображения элементов заданным образом, а также в качестве графических объектов и элементов управления. Создание компоновщика происходит c помощью конструктора CreateLayout:
app.CreateLayout( (str) type, [(str)] options )
Конструктор имеет два параметра: type - тип компоновки - является обязательным, options - опции - необязательный. Если опции не указаны, то создаётся компоновщик с опциями по умолчанию.
type:
- 'linear' - линейный
- 'absolute' - абсолютный
- 'frame' - кадр
- 'сard' - карточка
options:
- Опции управления размером:
- FillX - установить ширину равной ширине его родителя
- FillY - установить высоту равной высоте его родителя
- FillXY - установить размер компоновщика равной размерам родителя
- Опции управления расположением элементов:
- Vertical - по вертикали
- Horizontal - по горизонтали
- Опции управления выравниванием элементов:
- Left - по левому краю
- Center - горизонтально по центру
- Right - по правому краю
- Top - по верхнему краю
- vCenter - вертикально по центру
- Bottom - по нижнему краю
- TopCenter - вверху по середине (по умолчанию)
- Опции действий:
- TouchThrough - пропускает события касания сквозь себя, что позволяет их обрабатывать элементами, находящимися под компоновщиком
- Smartwatch - запрещает пропускание событий (компоновщик для умных часов)
- TouchSpy - вызывает обработчик SetOnTouch компоновщика при касании любого элемента компоновщика (элементы компоновщика пропускают события касания сквозь себя)
Тип компоновки linear используется чаще всего, поскольку задаёт относительное расположение и выравнивание элементов встык без наложения. Опции расположения и выравнивания элементов. работают только в компоновщиках этого типа.
Тип absolute используется для абсолютного расположения элементов с помощью метода SetPosition. Более того, позиционировать элементы с помощью метода SetPosition можно только при компоновке absolute или frame. В компоновщике linear он не работает. Абсолютная компоновка позволяет делать макеты с перекрывающимися элементами, что, например, можно использовать для расположения полноэкранных слоёв друг над другом для увеличения функциональности интерфейса.
Тип frame используется для отображения одного элемента из нескольких добавленных в него. То есть, при каждом вызове метода AddChild для него на экране будет отображаться только добавляемый элемент, а все остальные скрыты. После создания всех элементов управлять их видимостью можно путём использования их методов Show, Hide, Gone и SetVisibility.
В примере ниже вы можете поэкспериментировать с типами и опциями вложенного компоновщика _layInner, изменяя параметры конструктора.
Базовый пример
У компоновщика нет метода получения его элементов. Их можно получить путём перебора объектов ассоциативного массива, возвращённого методом app.GetObjects(), у которых порядковый номер, возвращенный методом GetChildOrder( child ), не равен -1.
Список дочерних элементов можно организовать и при помощи ассоциативного массива, добавленного компоновщику:
layout.children = [];
layout.children[ 'obj1' ] = obj1;
layout.children[ 'obj2' ] = obj2;
layout.children[ 'obj3' ] = obj3;
Такое решение обладает меньшей гибкостью, но позволяет ускорить работу с дочерними объектами по сравнению с вызовами относительно медленных методов API DroidScript.
Преимущество ассоциативного масива состоит в большей универсальности. Во-первых, можно быстро получить объект по его имени, во-вторых, можно быстро получить список имён объектов с помощью метода корневого объекта keys:
Object.keys( array );
После создания компоновщика изменить его тип или опции нельзя. Это также справедливо для ряда других объектов в DroidScript: в одних случаях можно изменить часть или все свойства, заданные объекту при его создании, а в других - нельзя. В последнем случае необходимо пересоздавать объекты заново.