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

Основы работы с App Inventor Java Bridge

18.09.2017

Для начала определимся с тем, где и как будет создаваться интерфейс и программная логика будущих приложений. Интерфейс можно создавать визуально в дизайнере App Inventor (AI) или невизуально путём кодирования. Программную логику также можно реализовать визуально в редакторе блоков AI или в коде. Если в качестве IDE выбрать Android Studio (AS), то станут возможны следующие варианты:

  1. Интерфейс создаётся в дизайнере AI, часть логики в редакторе блоков AI, а другая часть логики - в коде проекта AS.
  2. Интерфейс создаётся в дизайнере AI, а вся логика - в коде проекта AS.
  3. Интерфейс и логика создаются в коде проекта AS.

Первый вариант можно использовать для создания набросков и изучения работы Java-моста. Для работы над реальными проектами он не годится по следующим причинам:

  1. После редактирования блоков в AI часто возникает ошибка генерации Java-кода. Для уменьшения вероятности её появления сохраняйте проект перед каждой генерацией. В некоторых случаях может потребоваться повторное открытие проекта, перегруппировка блоков и даже удаление каких-то из них для определения того, что не нравится генератору.
  2. Генератор кода в некоторых случаях работает некорректно и может создать код частично, либо вообще его не создать. Приходится дополнительно проверять соответствие кода блокам.
  3. Код, который создаёт генератор, во многих случаях придётся править для более удобной работы с ним.

Проще говоря, чем меньше используется генератор Java-кода, тем меньше странностей и сюрпризов будет в последнем.

Интерфейсную часть приложения можно создавать:

  1. Вручную визуальным образом в дизайнере AI с последующей его генерацией в Java-код.
  2. Вручную на этапе проектирования приложения в AS.
  3. Программно на этапе выполнения приложения.

Каждый из этих подходов имеет преимущества, но последний вариант в некоторых случаях позволяет заметно упростить и повысить эффективность работы, как будет вскоре показано.

Рассмотрим базовый пример.

Общая последовательность действий выглядит так:

  1. Импортируем используемые в проекте классы (имя класса совпадает с типом виджета)
  2. Объявляем виджеты
  3. Создаём виджеты и настраиваем их свойства
  4. Регистрируем обработчик событий (один для каждого типа)
  5. Осуществляем отправку (маршрутизацию) возникшего события
  6. Обрабатываем событие (выполняем заданное действие)

Ключевое слово this в коде является указателем на объект экрана - Screen1 в нашем случае. Названия методов совпадают с названиями полей на панели свойств в дизайнере и названиями свойств в блоках. Например, если в блоке указано свойство BackgroundColor, то и название метода для изменения данного свойства будет BackgroundColor().

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

Предположим, нам необходимо заполнять в приложении 4 текстовых поля для последующей отправки содержащейся в них информации в базу данных или по электронной почте. При использовании AI Java Bridge сгенерированный код будет содержать большой объём дублированного кода, выглядящего так:

Объявление поясняющей надписи 1 для текстового поля 1
Объявление поясняющей надписи 2 для текстового поля 2
Объявление поясняющей надписи 3 для текстового поля 3
Объявление поясняющей надписи 4 для текстового поля 4

Объявление текстового поля 1
Объявление текстового поля 2
Объявление текстового поля 3
Объявление текстового поля 4

Создание поясняющей надписи 1 для текстового поля 1
Создание поясняющей надписи 2 для текстового поля 2
Создание поясняющей надписи 3 для текстового поля 3
Создание поясняющей надписи 4 для текстового поля 4

Создание текстового поля 1
Создание текстового поля 2
Создание текстового поля 3
Создание текстового поля 4

Задание свойства для поясняющей записи 1
Задание свойства для поясняющей записи 2
Задание свойства для поясняющей записи 3
Задание свойства для поясняющей записи 4

Задание свойства текстового поля 1
Задание свойства текстового поля 2
Задание свойства текстового поля 3
Задание свойства текстового поля 4

Создать список объектов

Создать функцию для очистки всех текстовых полей.

Работать с таким кодом затруднительно, так как любое изменение (добавление/удаление виджетов, выравнивающих контейнеров, свойств и др.) будет требовать просто огромного объёма ручной работы и операций копирования/вставки, чего можно избежать путём программной генерации данного кода. Для этого создадим список имён полей, который затем будет использован для создания всех необходимых виджетов в цикле.

Предположим, мы захотели выделить названия полей жирным начертанием. Для этого нужно добавить в цикл всего одну строку:

title.FontBold(true);

Если требуется создать обработчики событий для создаваемых программно виджетов, то для этого можно воспользоваться хеш-таблицей пар ключ-значение интерфейса HashMap. Ключами в этом списке нужно сделать строковые представления виджетов (при помощи метода toString()), а значениями - строки, связанные с требуемыми действиями.

Из показанных примеров видно, что текстовое программирование позволяет выйти за рамки ограничений среды визуальной разработки App Inventor.

© 2016-2024 
actech