DroidScript
DroidScript
учимся и разрабатываем

Компоновщик

15.05.2020

Компоновщики (также называемые макетами или контейнерами) 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, изменяя параметры конструктора.

Базовый пример

Выполнить в DS

У компоновщика нет метода получения его элементов. Их можно получить путём перебора объектов ассоциативного массива, возвращённого методом app.GetObjects(), у которых порядковый номер, возвращенный методом GetChildOrder( child ), не равен -1.

Выполнить в DS

Список дочерних элементов можно организовать и при помощи ассоциативного массива, добавленного компоновщику:

layout.children = [];
layout.children[ 'obj1' ] = obj1;
layout.children[ 'obj2' ] = obj2;
layout.children[ 'obj3' ] = obj3;

Такое решение обладает меньшей гибкостью, но позволяет ускорить работу с дочерними объектами по сравнению с вызовами относительно медленных методов API DroidScript.

Преимущество ассоциативного масива состоит в большей универсальности. Во-первых, можно быстро получить объект по его имени, во-вторых, можно быстро получить список имён объектов с помощью метода корневого объекта keys:

Object.keys( array );

После создания компоновщика изменить его тип или опции нельзя. Это также справедливо для ряда других объектов в DroidScript: в одних случаях можно изменить часть или все свойства, заданные объекту при его создании, а в других - нельзя. В последнем случае необходимо пересоздавать объекты заново.

Методы:

  • AddChild( {} child, int order ) - добавляет элемент с возможностью указания позиции во втором параметре
    Выполнить в DS
    newButton = app.CreateButton( 'Новая кнопка' ); newButton.SetTextSize( 20 ); myObject.AddChild( newButton, 1 );
  • Animate( str type, callback, int time ) - применяет к компоновщику анимацию заданного типа:
    • "SlideFromX"
    • "ScaleFromX"
    • "SlideToX"
    • "ScaleToX", где вместо X нужно указать сторону Left, Right, Top или Bottom
    • 'FadeIn'
    • 'FadeOut'
    • 'CrossFade'
    Выполнить в DS
    myObject.Animate( 'SlideFromLeft' );
  • ChildToFront( {} child ) - выводит элемент на передний план
    Выполнить в DS
    myObject.ChildToFront( newButton );
  • DestroyChild( {} child ) - разрушает (освобождает) элемент
    Выполнить в DS
    myObject.DestroyChild( newButton ); app.ShowPopup( app.ShowPopup( newButton.GetText()) );
  • GetChildOrder( {} child ) - возвращает порядковый номер элемента. Если указанный объект не принадлежит комполновщику, то возвращается -1
    Выполнить в DS
    myObject.GetChildOrder( newButton );
  • GetType():(str) - возвращает тип объекта
    Выполнить в DS
    app.ShowPopup( myObject.GetType() );
  • RemoveChild( {} child ) - удаляет (из своего списка) элемент
    Выполнить в DS
    myObject.RemoveChild( newButton ); app.ShowPopup( newButton.GetText() );
  • SetBackColor( str clr ) - устанавливает цвет фона
    Выполнить в DS
    myObject.SetBackColor( '#674657' )
  • SetCornerRadius( int radius ) - устанавливает радиус закругления углов
    Выполнить в DS
    myObject.SetCornerRadius( 8 )
  • SetElevation( int relevation ) - устанавливает величину подъёма компоновщика для получения тени
    Выполнить в DS
    myObject.SetElevation( 4 )
  • SetGravity( ('left', 'top', 'right', 'bottom', 'center', 'vcenter') graity ) - устанавливает выравнивание элементов в linear компоновщике
    Выполнить в DS
    myObject.SetGravity( 'left' );
  • SetOnChildChange( callback ) - вызывает ФОВ, если произошли изменения в принадлежащих компоновщикe элементах: при изменении текста в поле ввода или опции в выпадающем списке.
    Выполнить в DS
    myTextEdit = app.CreateTextEdit( 'Текст' ); myObject.AddChild( myTextEdit, 1 ); myObject.SetOnChildChange( function(){ app.ShowPopup( 'Произошло изменение' ); });
  • SetOnLongTouch( callback ) - задаёт ФОВ для обработки долгого прикосновения
    Выполнить в DS
    myObject.SetOnLongTouch( function(){ app.ShowPopup( 'Долгое прикосновение' ); });
  • SetOnTouch( callback ) - задаёт ФОВ для обработки короткого прикосновения
    Выполнить в DS
    myObject.SetOnTouch( function(){ app.ShowPopup( 'Короткое прикосновение' ); });
  • SetOnTouchDown( callback ) - задаёт ФОВ для обработки касания
    Выполнить в DS
    myObject.SetOnTouchDown( function(){ app.ShowPopup( 'Коснулись' ); });
  • SetOnTouchMove( callback ) - задаёт ФОВ для обработки перемещения
    Выполнить в DS
    myObject.SetOnTouchMove( function(){ app.ShowPopup( 'Перемещаем' ); });
  • SetOnTouchUp( callback ) - задаёт ФОВ для обработки отпускания
    Выполнить в DS
    myObject.SetOnTouchUp( function(){ app.ShowPopup( 'Отпустили' ); });
  • SetOrientation( (str) orient ) - задаёт расположение элементов:
    • vertical - по вертикали
    • horizontal - по горизонталм
    Выполнить в DS
    myObject.SetOrientation( 'horizontal' );
  • SetTouchThrough( bool through ) - задаёт режим обработки событий (true - пропуск событий сквозь себя без обработки)
    Выполнить в DS
    myObject.SetTouchThrough( true );
  • SetTouchable( bool touchable ) - задаёт возможность реагировать на события
    Выполнить в DS
    myObject.SetTouchable( false );
© 2016-2024 
actech