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

Адаптер для плагина расширения ExtUI

16.04.2017

Плагин расширения ExtUI представляет собой систему динамической генерации объектов и методов API Android. По этой причине он не содержит в себе готового набора виджетов, методов для работы с ним и обработчиков событий, что сократило бы его функциональность.

Вызов методов API Android производится несколько сложнее, чем вызов методов API DroidScript, поскольку для этого требуется точное указание количества аргументов и их типов. С другой стороны, это позволяет постепенно знакомиться с возможностями API Android, что весьма пригодится, если далее планируется освоить разработку мобильных приложений на Java.

Для выполнения примеров на этой странице необходимо установить плагин расширения:

  • Скачайте архив плагина ExtUI
  • Распакуйте его и скопируйте полученный apk-файл в директорию DroidScript/Plugins
  • Перезапустите DroidScript. После перезапуска появится всплывающее сообщение об успешной установке плагина.

Для проверки работоспособности плагина выполните пример ниже. В нём создаётся кнопка и производится её поворот на 45 градусов.

Выполнить

В данном примере интерфейсная функция плагина расширения runMethodNot вызывается напрямую. Это неудобно, так как при её вызове необходимо указывать тип аргументов. Упрощение вызова достигается при помощи адаптера, который можно реализовать в виде списка функций и метода call, например, setRotation.call( my_object ) или объекта с полиморфной функцией. Для удобства выберем второй вариант.

Создайте новый JavaScript-проект и добавьте в него следующий код.

Добавьте в проект новый файл methods.js, в котором и будет реализован объект-адаптер.

Код получился объёмным, но его основная часть состоит из перечня вызовов функций _Call, аргументы для которой берутся из заголовков соответствующих методов API Android. Получить их можно при помощи метода плагина GetMethods:

var _list = _plg.GetMethods( "Switch" ).split('|').join('\n\n');
alert( "Switch" + ':\n\n' + _list );

, или из справочника разработчика Android. Например, заголовок метода setPadding выглядит так:

setPadding(int left, int top, int right, int bottom)

Для вызова этого метода ему нужно передать 4 аргумента типа int. Перечисляем типы в строке через запятую и получаем требуемый аргумент для нашей функции _Call:

_Call( "int,int,int,int" );

Функциональность адаптера зависит от того, сколько методов в нём реализовано. Можно реализовать адаптер с ограниченным набором методов под тот или иной проект или один большой с максимально возможным их количеством, наполняя его постепенно.

В заключение приведу достоинства и недостатки прямого вызова интерфейсной функции плагина по сравнению с использованием адаптера для того, чтобы понять необходимость использования того или другого.

Прямой вызов интерфейсной функции плагина

Преимущества

  • Функциональность

Недостатки

  • Необходимо точно знать количество аргументов методов и их типы

Вызов интерфейсной функции через адаптер

Преимущества

  • Не нужно помнить и указывать количество и название типов аргументов
  • Дополнительный уровень развязки между кодом приложения и плагина. Если, вдруг (что маловероятно), интерфейс плагина изменится, то код приложения не пострадает, так как все изменения в этом случае нужно будет произвести только в адаптере

Недостатки

  • Ограниченная функциональность (сколько добавлено методов, столько и будет доступно)
  • Дополнительное кодирование адаптера
  • Необходимо точно знать количество аргументов методов
  • Вызов методов происходит немного дольше
© 2016-2024 
actech