DroidScript

Разработка расширений для App Inventor: встроенные объекты

DroidScript
инструменты разработки под Android

Разработка расширений для App Inventor: встроенные объекты

Методы и свойства классов встроенных объектов можно посмотреть в файлах исходного кода в папке \components\runtime, но мы создадим блок, который будет выводить методы любого заданного полным именем пакета класса.

Код расширения.

В коде используются три функции: блока, возврата списка методов и отображения текста в диалоге. Последнюю можно было бы исключить из расширения и реализовать в виде боков, но было замечено, что при использовании объемного текста в диалоге Notifier кнопка закрытия диалога выходит за пределы экрана и становится недоступной. К тому же, использование функции отображения в расширении уменьшает количество блоков для его использования до двух.

Для получения методов класса сначала создаётся соответствующий ему экземпляр, а затем вызывается метод getMethods():

Class c = Class.forName( clName );
Method[] methods = c.getMethods();

Рассмотрим коротко иерархию классов App Inventor для более эффективного использования данного блока.

На вершине классов находится интерфейс Component. Его реализуют классы видимых компонентов VisibleComponent и невидимых AndroidNonvisibleComponent. Класс видимых компонентов VisibleComponent является родительском для классов Sprite и AndroidViewComponent. К видимым компонентам относятся те, которые имеют видимое представление. Они расположены в разделах дизайнера User Interface (кроме Notifier), Layout, Drawing and Animation, а также все объекты-picker и VideoPlayer.

Класс AndroidViewComponent содержит методы для доступа к свойствам, общих для всех виджетов - ширине, высоте, видимости, номеру строки и столбца (при добавлении их табличной раскладке), а также метод getView() для получения соответствующего им вида, что используется для их приведения к объектам Android. К виджетам относятся и компоновщики, реализующие также интерфейс ComponentContainer, что позволяет им содержать в себе другие компоненты. Родительским классом компоновщиков является класс HVArrangement.

Класс ComponentContainer включает в себя методы для добавления виджетов контейнеру $add, ссылку на форму $form, содержащую данный контейнер (корневой формой является главная форма Screen1), а также контекст активности $context, использующийся при создании виджетов Android. При создании встроенных виджетов конструктору необходимо передать ссылку на какой-либо контейнерный объект (Screen1 или компоновщик). Метода удаления виджета из контейнера нет. Для выполнения этой операции необходимо осуществить приведение контейнера к объекту типа Android, относительно которого и вызвать нужный метод.

Для доступа к свойствам активности используются методы класса Form - наследником класса Activity.

При помощи созданного блока посмотрим свойства текстовой надписи из пакета com.google.appinventor.components.runtime.Label. Большинство методов нам знакомы, так как они реализованы в блоках. Но интересно то, что среди свойств нет свойства имени или идентификатора, что делает невозможным прямой доступ к ней (как и всем остальным объектам в AI). У надписи есть имя, которое видно в дизайнере и редакторе блоков, но это имя недоступно на этапе выполнения приложения. Но доступ к неё всё же можно получить либо через список пар, в который её добавить на этапе разработке, либо через метод компоновщика для доступа к дочерним элементам по индексу.

Оглавление  
© 2016 droidscript.ru admin@droidscript.ru