Объекты в DroidScript

В DroidScript большое количество объектов и служб разных типов.
Ниже перечислены объекты, которые размещаются в компоновщике и автоматически освобождаются при освобождении компоновщика вызовом его деструктора Destroy:
Layout - компоновщик
Image - холст для рисования и отображения графики
Button - кнопка
ToggleButton - кнопка с фиксацией и световой индикацией состояния включена/выключена
CheckBox - флажок
Spinner - выпадающий список
SeekBar - ползунок
Text - текстовая область
TextEdit - однострочное или многострочное поле ввода
List - список
WebView - браузер
Scroller - область прокрутки
CameraView - объект для работы с камерой устройства
VideoView - видеопроигрыватель
WebGLView - холст для быстрой работы с 2D-графикой
Автономно размещаемые (без использования компоновщика) и автоматически освобождаемые объекты:
YesNoDialog - диалог подтверждения
ListDialog - диалог со списком
ListView - полноэкранный список
BluetoothList - диалог со списком беспроводных устройств
AudioRecoder - диктофон
SMS -  объект для работы с sms-сообщениями
Email - объект для работы с почтовыми сообщениями
SmartWatch (поддерживается только умными часами)
Crypt - шифратор
SpeechRec - распознаватель речи
PhoneState - телефон
Объекты, которые необходимо освобождать вручную:
Dialog - диалоговое окно
MediaPlayer - проигрыватель
Sensor - интерфейс к датчикам устройства
Locator - GPS-приёмник
NetClient - сетевой клиент
NxtRemote - интерфейс NXT-устройств
WebServer - web-сервер
USBSerial - usb-интерфейс
SysProc - работа с командной строкой и системными процедурами
Service - работа с фоновой службой поддержки
Object - объект
Synth - синтезатор звука
BluetoothSerial - беспроводная связь с устройствами
ZipUtil - архиватор
Downloader - загрузчик
MediaStore - хранилище медиа-ресурсов
PlayStore - интерфейс к магазину приложений Google
Notification - уведомления
File - файловый объект
Важно запомнить, что:
  • Одни объекты могут располагаться только в макете, а для расположения других макеты не используются
  • Одни объекты автоматически удаляются из памяти, а другие нужно освобождать вручную.
При создании объекта ему присваивается порядковый идентификатор вида "#номер", который можно увидеть в свойстве id, например, #1. Идентификаторы нумеруются с нуля. Свойство id позволяет читать и записывать значение, но они не проверяются на уникальность. Как и в JavaScript в DroidScript нет строгой типизации и переменной можно присваивать ссылки на разные объекты, что может привести к путанице:

L = app.CreateButton("Кнопка");  //переменная ссылается на кнопку 
L = app.CreateText("Text"); // теперь эта же переменная ссылается на  текстовое поле
Доступ к объектам осуществляется по их идентификаторам через глобальный массив _map. Это недокументированная возможность, но пока её не собираются убирать. Например, для доступа к объекту с идентификатором "#3" пишем так:

L = _map["#3"];// присваиваем ссылку на объект переменной
Необходимость использования недокументированного массива _map обусловлена тем, что в текущей версии DroidScript механизм родитель-дочерние объекты реализован недостаточно полно и приходится искать нестандартные решения для определения и работы с дочерними объектами. Например, как вариант рекомендуется созданные объекты сразу помещать в массив и присваивать им имена для более удобного обращения к ним:

var object = app.CreateButton("");
object.name = "Bt";
mass[0] = object;
Использование глобального массива _map - рискованная, но более удобная альтернатива этому. Получить все свойства объекта можно при помощи цикла forin:

txt = '';
for (i  in app)
{
	txt = txt + I + "\n";
}
app.Alert(txt);
В этом коде названия всех методов и свойств объекта app выводятся в окне сообщения. Доступ к свойствам объектов в DroidScript осуществляется, главным образом, через методы. У контролов, например, доступно только одно свойство - id.
Объекты в DroidScript имеют относительно скромный список методов, что поначалу может удивить. Но сделано это неслучайно. Во-первых, идеология DroidScript - простота разработки приложений. Во-вторых, благодаря тесной интеграции с HTML5 нет необходимости создавать большое количество свойств для объектов, поскольку при необходимости интерфейс приложения можно полностью реализовать на стороне web, с использованием CSS и дополнительных библиотек, например, jQuery.
Оглавление
Copyright © 2016