Разработка Android-приложений в деталях Машнин Тимур
Supports rtl – определяет значение атрибута android: supportsRtl тэга <application> – если true, тогда приложение поддерживает right-to-left (RTL) письменность справа налево.
Раздел Application Nodes вкладки Application кнопкой Add обеспечивает добавление в тэг <application> тэгов <activity> (элемент Activity), <activity-alias> (элемент Activity Alias), <meta-data> (элемент Meta Data), <provider> (элемент Provider), <receiver> (элемент Receiver), <service> (элемент Service), <uses-library> (элемент Uses Library).
Кнопка Add позволяет добавлять в тэги <activity>, <receiver> и <service> тэги <intent-filter> (элемент Intent Filter) и <meta-data> (элемент Meta Data), при этом в тэг <intent-filter> могут добавляться кнопкой Add тэги <action> (элемент Action), <category> (элемент Category), <data> (элемент Data).
В тэг <provider> кнопка Add добавляет тэги <grant-uri-permission> (элемент Grant Uri Permission), <meta-data> (элемент Meta Data), <path-permission> (элемент Path Permission).
Тэг <activity> (элемент Activity) описывает Activity-компонент приложения (класс, расширяющий класс android.app.Activity). При выборе элемента Activity кнопкой Add, во вкладке Application появляется раздел Attributes for Activity, позволяющий определить атрибуты тэга <activity> с помощью следующих полей и списков:
Name – при нажатии открывает мастер создания Java-класса, расширяющего класс android.app.Activity. Созданный Activity-компонент указывается в качестве значения атрибута android: name.
Theme – определяет для Activity-компонента стиль, указываемый как значение атрибута android: theme.
Label – отображаемая пользователю метка Activity-компонента, указываемая значением атрибута android: label.
Icon – значок Activity-компонента, определяемый значением атрибута android: icon.
Logo – определяет значение атрибута android: logo, указывающего логотип приложения для отображения в панели ActionBar.
Launch mode – список позволяет выбрать значение атрибута android: launchMode, определяющего загрузку Activity-компонента при получении вызывающего Intent-объекта:
standart (по умолчанию) – Android-система всегда создает новый экземпляр Activity-компонента в целевой задаче и передает ему Intent-объект.
singleTop – если экземпляр Activity-компонента уже существует на переднем плане целевой задачи, вызывается метод onNewIntent () уже существующего экземпляра, вместо создания нового экземпляра Activity-компонента.
singleTask – Android-система создает новый экземпляр Activity-компонента в новой задаче и передает ему Intent-объект. Если экземпляр Activity-компонента уже существует, тогда вызывается его метод onNewIntent (), вместо создания нового экземпляра Activity-компонента.
singleInstance – работает аналогично singleTask, за исключением того, что задача может содержать только один Activity-компонент.
Screen orientation – список позволяет выбрать значение атрибута android: screenOrientation, определяющего ориентацию отображения Activity-компонента на экране:
unspecified (по умолчанию) – ориентацию выбирает Android-система.
user – ориентация определяется пользовательскими предпочтениями.
behind – ориентация такая же, как и у предыдущего Activity-компонента.
landscape – альбомная (горизонтальная) ориентация.
portrait – портретная (вертикальная) ориентация.
reverseLandscape – альбомная (горизонтальная) ориентация в противоположном направлении.
reversePortrait – портретная (вертикальная) ориентация в противоположном направлении.
sensorLandscape – альбомная (горизонтальная) ориентация, направление которой определяется Android-системой на основе сенсора.
sensorPortrait – портретная (вертикальная) ориентация, направление которой определяется Android-системой на основе сенсора.
sensor – ориентация определяется Android-системой на основе сенсора.
fullSensor – ориентация определяется Android-системой на основе сенсора с возможностью ориентаций landscape, portrait, reverseLandscape и reversePortrait.
nosensor – сенсор устройства игнорируется.
Config changes – кнопка Select позволяет выбрать значение атрибута android: configChanges, определяющего изменения конфигурации, при которых Activity-компонент не перезапускается, а вызывается его метод onConfigurationChanged ():
mcc – изменение MCC-кода страны.
mnc – изменение MNC-кода сети.
locale – изменение локализации устройства.
touchscreen – изменение сенсорного экрана.
keyboard – изменение типа клавиатуры устройства.
keyboardHidden – изменение доступности клавиатуры.
navigation – изменение механизма навигации устройства.
screenLayout – изменение компоновки экрана.
fontScale – изменение размера шрифта.
uiMode – изменение состояния устройства (устройство помещено в держатель).
orientation – изменилась ориентация экрана.
screenSize – при изменении ориентации экрана изменились пропорции экрана.
smallestScreenSize – при подключении устройства к внешнему дисплею изменился размер экрана.
Permission – список позволяет выбрать разрешение, которое должно иметь стороннее Android-приложение для вызова Activity-компонента, указывается значением атрибута android: permission.
Multiprocess – определяет значение атрибута android: multiprocess – если true, тогда Activity-компонент запускается в том же процессе, что и вызвавший его Android-компонент.
Process – определяет значение атрибута android: process, указывающего имя процесса, в котором запускается Activity-компонент.
Task affinity – определяет значение атрибута android: taskAffinity, указывающего имя задачи, в которой запускается Activity-компонент с флагом FLAG_ACTIVITY_NEW_TASK.
Allow task reparenting – определяет значение атрибута android: allowTaskReparenting – если true, тогда Activity-компонент может перемещаться из задачи, которая его запустила, в задачу переднего плана, с которой Activity-компонент имеет общее taskAffinity-значение, по умолчанию false.
Finish on task launch – определяет значение атрибута android: finishOnTaskLaunch – если true, тогда существующий экземпляр Activity-компонента уничтожается, если пользователь снова запускает его задачу, по умолчанию false.
Finish on close system dialogs – определяет значение атрибута android: finishOnCloseSystemDialogs – если true, тогда Activity-компонент уничтожается при закрытии текущего окна, например при нажатии кнопки HOME или при блокировке устройства.
Clear task on launch – определяет значение атрибута android: clearTaskOnLaunch – если true, тогда при перезапуске задачи из домашнего экрана, задача очищается от всех Activity-компонентов до данного корневого Activity-компонента, по умолчанию false.
No history – определяет значение атрибута android: noHistory – если true, тогда Activity-компонент удаляется из стека задачи и уничтожается, когда становится невидимым на экране, по умолчанию false.
Always retain task state – определяет значение атрибута android: alwaysRetainTaskState – если true, тогда Android-система не очищает задачу данного корневого Activity-компонента, а сохраняет ее последнее состояние, по умолчанию false.
State not need – определяет значение атрибута android: stateNotNeeded – если true, тогда метод onSaveInstanceState () Activity-компонента не вызывается, а его метод onCreate () в качестве аргумента всегда получает null, по умолчанию false.
Exclude from recents – определяет значение атрибута android: excludeFromRecents – если true, тогда Activity-компонент не появляется в списке недавно запущенных Activity-компонентов, который отображается при долгом нажатии на кнопку HOME устройства, по умолчанию false.
Enabled – определяет значение атрибута android: enabled – если false, тогда Android-система не может создавать экземпляры Activity-компонента, по умолчанию true.
Exported – определяет значение атрибута android: exported – если true, тогда Activity-компонент может запускаться другими Android-приложениями, если false, тогда Activity-компонент может запускаться только Android-компонентами своего приложения или другими модулями с общим sharedUserId-идентификатором.
Window soft input mode – кнопка Select позволяет выбрать значение атрибута android: windowSoftInputMode, определяющего как окно Activity-компонента взаимодействует с окном экранной клавиатуры:
stateUnspecified (по умолчанию) – состояние видимости или нет экранной клавиатуры выбирает Android-система.
stateUnchanged – экранная клавиатура сохраняет свое последнее состояние.
stateHidden – экранная клавиатура скрыта когда пользователь переходит вперед к Activity-компоненту.
stateAlwaysHidden – экранная клавиатура всегда скрыта.
stateVisible – экранная клавиатура появляется когда пользователь переходит вперед к Activity-компоненту.
stateAlwaysVisible – экранная клавиатура всегда появляется.
adjustUnspecified (по умолчанию) – будет окно Activity-компонента изменять свои размеры и включать в себя окно экранной клавиатуры или экранная клавиатура будет накладываться на окно Activity-компонента с его панорамированием определяет Android-система.
adjustResize – окно Activity-компонента изменяет свои размеры и включает в себя окно экранной клавиатуры.
adjustPan – экранная клавиатура накладывается на окно Activity-компонента, которое панорамируется на ввод.
adjustNothing – окно Activity-компонента не изменяет свои размеры и не панорамируется.
Immersive – определяет значение атрибута android: immersive – если true, тогда Activity-компонент не прерывается другими Activity-компонентами и уведомлениями.
Hardware accelerated – определяет значение атрибута android: hardwareAccelerated – если true, тогда включается аппаратное ускорение визуализации, по умолчанию false.
Ui options – определяет значение атрибута android: uiOptions, указывающее дополнительные опции GUI-интерфейса Activity-компонента с помощью двух значений: none (по умолчанию, нет дополнительных опций) и splitActionBarWhenNarrow (добавляет панель ActionBar, разделенную на секцию навигации и панель действий).
Parent activity name – определяет значение атрибута android: parentActivityName, указывающее имя класса Activity-компонента, являющегося логическим родителем данному Activity-компоненту и к которому будет осуществляться переход с помощью кнопки Up.
Тэг <intent-filter> (элемент Intent Filter) обеспечивает создание объекта android.content.IntentFilter, который указывает Android-системе какие неявные (не указывающие целевой класс) объекты android.content.Intent может обрабатывать Android-компонент. При выборе элемента Intent Filter кнопкой Add, во вкладке Application появляется раздел Attributes for Intent Filter, позволяющий определить атрибуты тэга <intent-filter> с помощью следующих полей:
Label – определяет значение атрибута android: label, указывающего отображаемую пользователю метку Android-компонента, запущенного соответствующим фильтру Intent-объектом.
Icon – определяет значение атрибута android: icon, указывающего значок Android-компонента, запущенного соответствующим фильтру Intent-объектом.
Logo – определяет значение атрибута android: logo, указывающего логотип панели ActionBar Android-компонента, запущенного соответствующим фильтру Intent-объектом.
Priority – определяет значение атрибута android: priority, указывающего приоритет обработки соответствующих фильтру Intent-объектов для случая, когда несколько Android-компонентов соответствуют Intent-объекту.
Дочерний тэг <action> (элемент Action) тэга <intent-filter> указывает действие Intent-объекта, поддерживаемое Android-компонентом. При выборе элемента Action кнопкой Add, во вкладке Application появляется раздел Attributes for Action, позволяющий определить атрибут тэга <action> с помощью списка Name, обеспечивающего выбор действия android.intent.action.* как значения атрибута android: name.
Дочерний тэг <category> (элемент Category) тэга <intent-filter> указывает, к какому типу принадлежит Android-компонент, чтобы соответствовать категории Intent-объекта. При выборе элемента Category кнопкой Add, во вкладке Application появляется раздел Attributes for Category, позволяющий определить атрибут тэга <category> с помощью списка Name, обеспечивающего выбор категории android.intent.category.* как значения атрибута android: name.
Дочерний тэг <data> (элемент Data) тэга <intent-filter> описывает, какие данные могут быть переданы Intent-объектом Android-компоненту. При выборе элемента Data кнопкой Add, во вкладке Application появляется раздел Attributes for Data, позволяющий определить атрибуты тэга <data> с помощью полей Mime type (атрибут android: mimeType указывает MIME-тип данных Intent-объекта), Scheme, Host, Port, Path, Path prefix, Path pattern (URI-адрес данных в формате scheme://host: port/path, атрибуты android: scheme, android: host, android: port, android: path, android: pathPrefix, android: pathPattern).
Тэг <meta-data> (элемент Meta Data) позволяет добавить дополнительные данные к Android-компоненту, доступ к которым можно получить программным способом:
ApplicationInfo ai = getPackageManager().getApplicationInfo(activity.getPackageName (), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
String myValue = bundle.getString («myKey»);
При выборе элемента Meta Data кнопкой Add, во вкладке Application появляется раздел Attributes for Meta Data, позволяющий определить атрибуты тэга <meta-data> с помощью полей Name (атрибут android: name определяет имя элемента метаданных), Value (атрибут android: value определяет значение элемента метаданных), Resource (атрибут android: resource указывает ссылку на ресурс).
Тэг <activity-alias> (элемент Activity Alias) обеспечивает запуск целевого Activity-компонента под другим именем, меткой, с другим Intent-фильтром. При выборе элемента Activity Alias кнопкой Add, во вкладке Application появляется раздел Attributes for Activity Alias, позволяющий определить атрибуты тэга <activity-alias> с помощью полей и списков:
Name (атрибут android: name указывает псевдоним для целевого Activity-компонента),
Target activity (атрибут android: targetActivity указывает имя целевого Activity-компонента),
Label (атрибут android: label определяет метку псевдонима),
Description (атрибут android: description определяет описание псевдонима),
Icon (атрибут android: icon указывает значок псевдонима),
Logo (атрибут android: logo определяет логотип панели ActionBar),
Permission (атрибут android: permission указывает разрешение, которое должно иметь стороннее Android-приложение для вызова Activity-компонента через псевдоним),
Enabled (атрибут android: enabled указывает возможность создания экземпляра целевого Activity-компонента через псевдоним),
Exported (атрибут android: exported указывает возможность запуска целевого Activity-компонента сторонними Android-приложениями через псевдоним).
Parent activity name – определяет значение атрибута android: parentActivityName, указывающее имя класса Activity-компонента, являющегося логическим родителем данному Activity-компоненту и к которому будет осуществляться переход с помощью кнопки Up.
Тэг <provider> (элемент Provider) описывает ContentProvider-компонент приложения (класс, расширяющий класс android.content.ContentProvider), обеспечивающий управление данными приложения. При выборе элемента Provider кнопкой Add, во вкладке Application появляется раздел Attributes for Provider c полями и списками, позволяющий определить атрибуты тэга <provider>.
Поле со ссылкой Name при нажатии открывает мастер создания Java-класса, расширяющего класс android.content.ContentProvider. Созданный ContentProvider-компонент указывается в качестве значения атрибута android: name.
Поля Label, Description, Icon, Logo, Process, Permission, Multiprocess, Enabled, Exported элемента Provider работают аналогично соответствующим полям элемента Activity раздела Application Nodes вкладки Application.
Поле Authorities элемента Provider определяет значение атрибута android: authorities тэга <provider>, указывающего один или несколько URI-адресов, идентифицирующих для Android-системы ContentProvider-компонент.
Список Syncable определяет значение атрибута android: syncable тэга <provider> – если true, тогда данные ContentProvider-компонента синхронизированы с данными сервера.
Поле Read permission и поле Write permission определяют значения атрибутов android: readPermission и android: writePermission, указывающих разрешения, необходимые для чтения и изменения данных ContentProvider-компонента.
Поле Grand URI permissions определяет значение атрибута android: grantUriPermissions – если true, тогда приложению, вызывающему ContentProvider-компонент Intent-объектом с флагами FLAG_GRANT_READ_URI_PERMISSION и FLAG_GRANT_WRITE_URI_PERMISSION, предоставляется одноразовый доступ к данным.
Поле Init order определяет значение атрибута android: initOrder, указывающего номер в очереди инициализации ContentProvider-компонентов приложения.
Дочерний тэг <grant-uri-permission> (элемент Grant Uri Permission) тэга <provider> указывает URI-адрес ContentProvider-компонента, к которому может быть дан одноразовый доступ стороннему приложению, с помощью полей Path, Path prefix и Path pattern, определяющих значения атрибутов android: path, android: pathPrefix и android: pathPattern.
Дочерний тэг <path-permission> (элемент Path Permission) тэга <provider> указывает для URI-адреса ContentProvider-компонента разрешения доступа к его данным сторонним приложениям, используя поля Path, Path prefix, Path pattern, Permission, Read permission, Write permission, определяющих значения атрибутов android: path, android: pathPrefix, android: pathPattern, android: permission, android: readPermission и android: writePermission.
Тэг <receiver> (элемент Receiver) описывает BroadcastReceiver-компонент приложения (класс, расширяющий класс android.content.BroadcastReceiver), позволяющий обрабатывать Intent-объекты, посылаемые широковещательным способом Android-системой или другими приложениями. При выборе элемента Receiver кнопкой Add, во вкладке Application появляется раздел Attributes for Receiver c полями и списками, позволяющий определить атрибуты тэга <receiver>. Поле со ссылкой Name при нажатии открывает мастер создания Java-класса, расширяющего класс android.content.BroadcastReceiver. Созданный BroadcastReceiver-компонент указывается в качестве значения атрибута android: name.
Поля Label, Description, Icon, Logo, Process, Permission, Enabled, Exported элемента Receiver работают аналогично соответствующим полям элемента Activity раздела Application Nodes вкладки Application.
Тэг <service> (элемент Service) описывает Service-компонент приложения (класс, расширяющий класс android.app.Service), предназначенный для выполнения продолжительных операций без предоставления GUI-интерфейса. При выборе элемента Service кнопкой Add, во вкладке Application появляется раздел Attributes for Service c полями и списками, позволяющий определить атрибуты тэга <service>. Поле со ссылкой Name при нажатии открывает мастер создания Java-класса, расширяющего класс android.app.Service. Созданный Service-компонент указывается в качестве значения атрибута android: name. Поля Label, Description, Icon, Logo, Process, Permission, Enabled, Exported элемента Service работают аналогично соответствующим полям элемента Activity раздела Application Nodes вкладки Application.
Список Stop with task элемента Service определяет значение атрибута android: stopWithTask тэга <service> – если true, тогда сервис автоматически завершит свою работу при удалении пользователем задачи приложения, по умолчанию false.
Список Isolated process элемента Service определяет значение атрибута android: isolatedProcess – если true, тогда сервис будет работать в изолированном процессе, не имеющим те разрешения, которые даны остальной части приложения.
Тэг <uses-library> (элемент Uses Library) указывает Android-библиотеку, которая требуется для работы приложения. При выборе элемента Uses Library кнопкой Add, во вкладке Application появляется раздел Attributes for Uses Library c полями и списками, позволяющий определить атрибуты тэга <uses-library>. Поле Name определяет значение атрибута android: name, указывающего имя Android-библиотеки, с которой связано приложение, а список Required – значение атрибута android: required – если true (по умолчанию), тогда приложение не может работать и быть инсталлированным без наличия указанной библиотеки в устройстве.
Вкладка Permissions ADT-редактора файла AndroidManifest. xml с помощью кнопки Add обеспечивает добавление в тэг <manifest> тэгов <permission> (элемент Permission), <permission-group> (элемент Permission Group), <permission-tree> (элемент Permission Tree), <uses-permission> (элемент Uses Permission).
Тэг <permission> (элемент Permission) позволяет объявить пользовательское разрешение, которое должно получить стороннее приложение для доступа к Android-компонентам данного приложения. При выборе элемента Permission кнопкой Add, во вкладке Permissions появляется раздел Attributes for Permission c полями и списками, позволяющими определить атрибуты тэга <permission>.
Поля Name, Label, Description, Icon и Logo определяют значения атрибутов android: name, android: label, android: description, android: icon и android: logo, указывающих имя, метку, описание, значок и логотип пользовательского разрешения.
Поле Permission group определяет значение атрибута android: permissionGroup, указывающего группу разрешений, к которой относится данное разрешение.
Список Protection level определяет значение атрибута android: protectionLevel, указывающего уровень риска, который несет данное разрешение:
normal – минимальный риск для других приложений, Android-системы, пользователя.
dangerous – может причинить вред пользователю, например, разрешает доступ к данным пользователя.
signature – Android-система даст данное разрешение запрашивающему его приложению, только если запрашивающее разрешение приложение подписано тем же сертификатом, что и данное приложение, которое объявило пользовательское разрешение.
signatureOrSystem – используется только для системных приложений или приложений, подписанных тем же сертификатом, что и приложение, которое объявило пользовательское разрешение.
system – используется только для системных приложений.
development – разрешения даются только при разработке, но не при инсталляции.
Тэг <permission-group> (элемент Permission Group) объявляет группу пользовательских разрешений. При выборе элемента Permission Group кнопкой Add, во вкладке Permissions появляется раздел Attributes for Permission Group c полями и списками, позволяющими определить атрибуты тэга <permission-group>.
Поля Name, Label, Description, Icon и Logo определяют значения атрибутов android: name, android: label, android: description, android: icon и android: logo, указывающих имя, метку, описание, значок и логотип группы пользовательских разрешений.
Поле Priority определяет значение атрибута android: priority, указывающего приоритет обработки Intent-объекта.
Тэг <permission-tree> (элемент Permission Tree) объявляет базовое имя дерева разрешений, которые могут быть добавлены программным способом с помощью метода addPermission () класса android.content.pm.PackageManager. При выборе элемента Permission Tree кнопкой Add, во вкладке Permissions появляется раздел Attributes for Permission Tree c полями, позволяющими определить атрибуты тэга <permission-tree>. Поля Name, Label, Icon и Logo определяют значения атрибутов android: name, android: label, android: icon и android: logo, указывающих базовое имя, метку, значок и логотип дерева динамически добавляемых разрешений.
Тэг <uses-permission> (элемент Uses Permission) обеспечивает при инсталляции приложения запрос на предоставление ему определенного разрешения, которое указывается атрибутом android: name и может быть выбрано с помощью списка Name раздела Attributes for Uses Permission вкладки Permissions.
Вкладка Instrumentation ADT-редактора файла AndroidManifest. xml с помощью кнопки Add обеспечивает добавление в тэг <manifest> тэга <instrumentation>, который используется в файле манифеста проекта Android-тестирования (основа проекта Android-тестирования создается с помощью мастера Android Test Project).
При открытии в ADT-редакторе специфических для Android-разработки файлов, таких как activity_main. xml, strings. xml и AndroidManifest. xml, в меню Refactor Workbench-окна появляется подменю Android, содержащее опции Android-рефакторинга.
Мастер Android XML File
Мастер Android XML File, доступный в разделе Android команды New, обеспечивает создание набора ресурсов Android-приложения, состоящего из:
XML-описаний GUI-интерфейса Activity-компонентов (тип ресурса Layout),
различного рода значений, используемых приложением (тип ресурса Values),
графики (тип ресурса Drawable),
меню приложения (тип ресурса Menu),
наборов цветов (тип ресурса Color List),
анимации (тип ресурса Property Animation и Tween Animation),
метаданных приложения App Widgets (тип ресурса AppWidget Provider),
GUI-интерфейса PreferenceActivity-операции (тип ресурса Preference),
настроек поиска (тип ресурса Searchable).
Тип ресурса Layout
Для создания Layout-файла Android-приложения в окне Project Explorer нажмем правой кнопкой мышки на узле проекта и в контекстном меню выберем команду New | Other | Android | Android XML File или Android XML Layout File, нажмем кнопку Next – в результате откроется окно мастера создания Layout-файла, в списке Resource Type которого выбран тип Layout.
Поле File: мастера создания Layout-файла предлагает ввести имя нового файла XML-описания GUI-интерфейса, который затем с расширением. xml появится в каталоге res/layout Android-проекта и будет доступен в Java-коде с помощью сгенерированного класса R.layout. [имя Layout-файла] или в XML-коде с помощью ссылки @ [package: ] layout/ [имя Layout-файла].
Раздел Root Element: мастера создания Layout-файла предлагает выбрать корневой View-компонент GUI-интерфейса, который может быть как контейнером для других GUI-компонентов, так и отдельным GUI-компонентом.
В качестве контейнера обычно используются ViewGroup-компоненты LinearLayout (компоновка в столбец или строку), RelativeLayout (якорная компоновка) и FrameLayout (стековая компоновка), а индивидуальные GUI-компоненты представлены такими View-компонентами как кнопка, флажок, переключатель, текстовая область и др.
Помимо контейнера и индивидуального GUI-компонента корневым элементом Layout-файла может служить элемент <merge>, который предназначен для создания Layout-файла, включаемого в другой Layout-файл с помощью тэга <include>. Тэг индивидуального GUI-компонента может также содержать тэг <requestFocus>, дающий первоначальный фокус View-компоненту.
Тэг <fragment>, начиная с версии Android 3.0 (API level 11), обеспечивает модульность GUI-интерфейса Activity-компонента, описывая его часть, которая имеет свой жизненный цикл, свое взаимодействие с пользователем и с другими компонентами приложения и которая может добавляться или удаляться во время работы родительского Activity-компонента. Тэг <fragment> не может быть корневым элементом Layout-файла, а включается в основной Layout-файл в качестве дочернего тэга контейнера LinearLayout, RelativeLayout или FrameLayout. При этом атрибут android: name указывает имя класса фрагмента, расширяющего класс android.app.Fragment или android.support.v4.app.Fragment.
После ввода имени нового Layout-файла, выбора его корневого элемента и нажатия кнопки Next, появляется окно Choose Configuration Folder, позволяющее выбрать спецификатор папки layout, обеспечивающий поддержку специфической конфигурации Android-устройства, в соответствии с которой папка layout с нужным спецификатором будет выбрана Android-системой для загрузки при выполнении кода приложения.
После создания нового Layout-файла он будет открыт в Layout-редакторе ADT-плагина, обеспечивающим визуальное редактирование GUI-интерфейса.
Тип ресурса Values
Для создания ресурсного файла Android-приложения в окне Project Explorer нажмем правой кнопкой мышки на узле проекта и в контекстном меню выберем команду New | Other | Android | Android XML File или Android XML Values File, нажмем кнопку Next – в результате откроется окно мастера, в списке Resource Type которого выберем тип Values.
Поле File: мастера создания ресурсного файла предлагает ввести имя нового файла XML-описания значений приложения, который затем с расширением. xml появится в каталоге res/values Android-проекта и будет доступен в Java-коде с помощью сгенерированного R-класса или в XML-коде с помощью ссылки на имя ресурса.
Раздел Root Element: мастера создания ресурсного файла показывает, что корневым элементом XML-файла служит тэг <resources>.
После ввода имени нового ресурсного файла и нажатия кнопки Next, появляется окно Choose Configuration Folder, позволяющее выбрать спецификатор папки values, обеспечивающий поддержку специфической конфигурации Android-устройства, в соответствии с которой папка values с нужным спецификатором будет выбрана Android-системой для загрузки при выполнении кода приложения.
После создания нового ресурсного файла он будет открыт в редакторе Values-файлов ADT-плагина. Кнопка Add вкладки Resources редактора Values-файлов обеспечивает добавление в корневой тэг <resources> ресурсного файла тэгов <color> (элемент Color), <dimen> (элемент Dimension), <drawable> (элемент Drawable), <integer-array> (элемент Integer Array), <item> (элемент Item), <plurals> (элемент Quantity Strings (Plurals)), <string> (элемент String), <string-array> (элемент String Array), <style> (элемент Style/Theme).
Тэг <color> (элемент Color) определяет цвет, используя синтаксис <color name=«color_name»> hex_color </color>, где hex_color – значение цвета в формате #RGB, #ARGB, #RRGGBB, #AARRGGBB. При добавлении элемента Color кнопкой Add, во вкладке Resources появляется раздел Attributes for Color c полем Name (определяет значение атрибута name) и полем Value (определяет значение цвета). Тэг <color> как правило используется в ресурсном файле с именем colors. xml каталога res/values. Именованный ресурс цвета может использоваться для определения цвета различных объектов, таких как Drawable или TextView. Созданный ресурс доступен в
Java-коде с помощью сгенерированного класса R.color.color_name, или в XML-коде – с помощью ссылки @ [package: ] color/color_name.
Тэг <dimen> (элемент Dimension) определяет величину измерения, используя синтаксис <dimen name=«dimension_name»> dimension </dimen>, где dimension – значение в формате dp (независимый от плотности пиксель), sp (независимый от масштаба пиксель), pt (точка, 1/72 дюйма), px (пиксель), mm (миллиметр), in (дюйм). При добавлении элемента Dimension кнопкой Add, во вкладке Resources появляется раздел Attributes for Dimension c полем Name (определяет значение атрибута name) и полем Value (определяет значение). Созданный ресурс доступен в
Java-коде с помощью сгенерированного класса R. dimen. dimension_name, или в XML-коде – с помощью ссылки @ [package: ] dimen/dimension_name.
Тэг <drawable> (элемент Drawable) обеспечивает создание объекта android.graphics.drawable.PaintDrawable, представляющего прямоугольник, заполненный цветом, используя синтаксис <drawable name=color_name> color_value </drawable>, где color_value – значение цвета в формате #RGB, #ARGB, #RRGGBB, #AARRGGBB. При добавлении элемента Drawable кнопкой Add, во вкладке Resources появляется раздел Attributes for Drawable c полем Name (определяет значение атрибута name) и полем Value (определяет значение). Созданный ресурс доступен в Java-коде с помощью сгенерированного класса R. drawable. drawable_name, или в XML-коде – с помощью ссылки @ [package: ] drawable/drawable_name.
Тэг <integer-array> (элемент Integer Array) определяет массив целых чисел, используя синтаксис <integer-array name=«integer_array_name»> <item> integer </item> </integer-array>. При добавлении элемента Integer Array кнопкой Add, во вкладке Resources появляется раздел Attributes for Integer Array c полем Name – определяет значение атрибута name. Созданный ресурс доступен в Java-коде с помощью сгенерированного класса R.array.integer_array_name или в XML-коде с помощью ссылки @ [package: ] array/integer_array_name.
Тэг <item> (элемент Item) позволяет определить различного типа константы, для их последующего использования в Java-коде с помощью сгенерированного класса R. [тип константы]. [имя константы]. При добавлении элемента Item кнопкой Add, во вкладке Resources появляется раздел Attributes for Item c полями и списками:
Поле Name – определяет значение атрибута name, указывающего имя константы.
Список Type – определяет значение атрибута type, указывающего тип константы.
Поле Format – определяет значение атрибута format, указывающего формат значения константы.
Поле Value – определяет значение константы.
Тэг <plurals> (элемент Quantity Strings (Plurals)) обеспечивает строки для правильного склонения разного количества ключа ресурса. При добавлении элемента Quantity Strings (Plurals) кнопкой Add, во вкладке Resources появляется раздел Attributes for Quantity Strings (Plurals) c полем Name, определяющим значение атрибута name – ключ ресурса. Для созданного элемента кнопка Add позволяет добавлять дочерние элементы Item – тэги <item> содержащие строки ресурса. При этом раздел Attributes for Item содержит список Quantity, с помощью которого выбирается количество ресурса, которому должна соответствовать строка (атрибут quantity). Созданный ресурс доступен в Java-коде с помощью метода getQuantityString (int id, int quantity) класса android.content.res.Resources.
Тэг <string> (элемент String) определяет именованную строку, используя синтаксис <string name=«string_name»> text_string </string>. При добавлении элемента String кнопкой Add, во вкладке Resources появляется раздел Attributes for String c полем Name (определяет значение атрибута name) и полем Value (определяет строку). Созданный строковый ресурс доступен в Java-коде с помощью сгенерированного класса R.string.string_name, или в XML-коде – с помощью ссылки @string/string_name.
Тэг <string-array> (элемент String Array) определяет массив строк, используя синтаксис <string-array name=«string_array_name»> <item> text_string </item> </string-array>. При добавлении элемента String Array кнопкой Add, во вкладке Resources появляется раздел Attributes for String Array c полем Name – определяет значение атрибута name. Созданный ресурс доступен в Java-коде с помощью сгенерированного класса R.array.string_array_name или в XML-коде с помощью ссылки @ [package: ] array/string_array_name.
Тэг <style> (элемент Style/Theme) позволяет определить стиль для индивидуального View-компонента, для Activity-компонента и для приложения в целом, используя синтаксис <style name=«style_name» parent="@ [package: ] style/style_to_inherit»> <item name=» [package: ] style_property_name»> style_value </item> </style>. При добавлении элемента Style/Theme кнопкой Add, во вкладке Resources появляется раздел Attributes for Style/Theme c полем Name – определяет значение атрибута name и полем Parent – определяет значение атрибута parent. Созданный стиль доступен в Java-коде с помощью сгенерированного класса R.style.style_name или в XML-коде с помощью ссылки @ [package: ] style/style_name.
Тип ресурса Drawable
Для создания графического ресурса Android-приложения в окне Project Explorer нажмем правой кнопкой мышки на узле проекта и в контекстном меню выберем команду New | Other | Android | Android XML File, нажмем кнопку Next – в результате откроется окно мастера, в списке Resource Type которого выберем тип Drawable.
Поле File: мастера создания графического ресурса предлагает ввести имя нового XML-файла, который затем появится в каталоге res/drawable Android-проекта и будет доступен в Java-коде с помощью сгенерированного класса R.drawable.filename или в XML-коде с помощью ссылки @ [package: ] drawable/filename.
Раздел Root Element: мастера создания графического ресурса предлагает выбрать корневой XML-элемент ресурса:
<animation-list> – обеспечивает покадровую анимацию, каждый кадр которой представлен Drawable-объектом, определяемым дочерним тэгом <item>. Тэг <animation-list> имеет атрибуты android: visible (true/false, определяет видимость объекта), android: variablePadding (true/false, определяет изменяемость отступов), android: oneshot (true/false, определяет одноразовую или повторяющуюся анимацию). Тэг <item> имеет атрибуты android: drawable (ссылка на Drawable-объект кадра) и android: duration (продолжительность кадра в миллисекундах).
<bitmap> – обертывает PNG, JPG, GIF изображение, имеет атрибуты android: src (ссылка на обертываемое изображение), android: antialias (true/false, сглаживание изображения), android: filter (true/false, сглаживание при масштабировании изображения), android: dither (true/false, сглаживание переходов при несовпадении конфигураций изображения и экрана), android: gravity (выравнивание изображения, возможные значения top, bottom, left, right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill, clip_vertical, clip_horizontal), android: tileMode (режим повторения изображения для заполнения им контейнера, возможные значения disabled, clamp, repeat, mirror).
<clip> – накладывает маску на Drawable-объект, основываясь на Level-значении и используя атрибуты android: clipOrientation (ориентация маски, возможные значения horizontal, vertical), android: gravity (выравнивание маски, возможные значения top, bottom, left, right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill, clip_vertical, clip_horizontal), android: drawable (ссылка на исходный Drawable-объект).
<color> – создает прямоугольник, заполненный цветом, используя атрибут android: color (цвет заполнения).
<corners> – дочерний тэг тэга <shape>, определяет закругленные углы прямоугольника с помощью атрибутов android: radius (радиус всех 4 углов как ресурс <dimen>), android: topLeftRadius (радиус верхнего левого угла как ресурс <dimen>), android: topRightRadius (радиус верхнего правого угла как ресурс <dimen>), android: bottomLeftRadius (радиус нижнего левого угла как ресурс <dimen>), android: bottomRightRadius (радиус нижнего правого угла как ресурс <dimen>).
<gradient> – дочерний тэг тэга <shape>, определяет градиентную заливку геометрической формы с помощью атрибутов android: angle (угол градиента в градусах), android: centerX (относительный центр градиента по оси Х, от 0 до 1.0), android: centerY (относительный центр градиента по оси Y, от 0 до 1.0), android: centerColor (промежуточный цвет градиента), android: endColor (конечный цвет градиента), android: gradientRadius (радиус для радиального градиента), android: startColor (начальный цвет градиента), android: type (тип градиента, возможные значения linear, radial, sweep), android: useLevel (true/false, если геометрическая форма участвует в <level-list>, тогда если true – количество отображений градиента зависит от уровня формы).
<inset> – вставляет Drawable-объект с отступами, используя атрибуты android: drawable (ссылка на вставляемый Drawable-объект), android: insetTop (верхний отступ как ресурс <dimen>), android: insetRight (правый отступ как ресурс <dimen>), android: insetBottom (нижний отступ как ресурс <dimen>), android: insetLeft (левый отступ как ресурс <dimen>).
<item> – дочерний тэг тэгов <animation-list>, <layer-list>, <level-list>, <selector>.
<layer-list> – стек Drawable-объектов, определяемых дочерними элементами <item> с атрибутами android: drawable (ссылка на Drawable-объект), android: id (идентификатор в форме @+id/name), android: top (верхний отступ в пикселях), android: right (правый отступ в пикселях), android: bottom (нижний отступ в пикселях), android: left (левый отступ в пикселях).
<nine-patch> – обертывает 9PNG-изображение с изменяющимися размерами, создаваемое инструментом draw9patch SDK Tools из PNG-изображения, используя атрибуты android: src (ссылка на 9PNG-изображение), android: dither (true/false, сглаживание переходов при несовпадении конфигураций изображения и экрана).
<padding> – дочерний тэг тэга <shape>, определяет отступы для содержимого формы с помощью атрибутов android: top (верхний отступ как ресурс <dimen>), android: right (правый отступ как ресурс <dimen>), android: bottom (нижний отступ как ресурс <dimen>), android: left (левый отступ как ресурс <dimen>).
<rotate> – поворачивает Drawable-объект, основываясь на Level-значении и используя атрибуты android: visible (true/false, определяет видимость объекта), android: fromDegrees (первоначальный угол вращения), android: toDegrees (конечный угол вращения), android: pivotX (центр вращения по оси Х в процентном соотношении к ширине объекта), android: pivotY (центр вращения по оси Y в процентном соотношении к высоте объекта), android: drawable (ссылка на вращаемый объект).
<scale> – масштабирует Drawable-объект, основываясь на Level-значении и используя атрибуты android: scaleWidth (масштабирование ширины в процентах), android: scaleHeight (масштабирование высоты в процентах), android: scaleGravity (выравнивание после масштабирования), android: drawable (ссылка на первоначальный Drawable-объект), android: useIntrinsicSizeAsMinimum (true/false, определяет использование собственных размеров объекта как минимальных).
<selector> – содержит набор Drawable-объектов для различных состояний View-компонента. Набор Drawable-объектов описывается дочерними тэгами <item>, которые связываются с определенными состояниями с помощью атрибутов android: drawable (ссылка на Drawable-объект), android: state_pressed (true/false), android: state_focused (true/false), android: state_hovered (true/false), android: state_selected (true/false), android: state_checkable (true/false), android: state_checked (true/false), android: state_enabled (true/false), android: state_activated (true/false), android: state_window_focused (true/false).
<shape> – описывает геометрическую форму, используя атрибут android: shape (возможные значения rectangle, oval, line, ring) и дочерние тэги <corners>, <gradient>, <padding>, <size>, <solid>, <stroke>.
<size> – дочерний тэг тэга <shape>, определяет размеры геометрической формы, используя атрибуты android: height (высота как ресурс <dimen>), android: width (ширина как ресурс <dimen>).
<solid> – дочерний тэг тэга <shape>, определяет цвет заполнения формы с помощью атрибута android: color.
<stroke> – дочерний тэг тэга <shape>, определяет контур геометрической формы, используя атрибуты android: width (ширина контура как ресурс <dimen>), android: color (цвет контура), android: dashGap (расстояние между пунктирами как ресурс <dimen>), android: dashWidth (ширина пунктира как ресурс <dimen>).
После ввода имени нового графического ресурса, выбора его корневого элемента и нажатия кнопки Next, появляется окно Choose Configuration Folder, позволяющее выбрать спецификатор папки drawable, обеспечивающий поддержку специфической конфигурации Android-устройства, в соответствии с которой папка drawable с нужным спецификатором будет выбрана Android-системой для загрузки при выполнении кода приложения.
После создания нового графического ресурса он будет открыт в XML-редакторе кода.
Тип ресурса Menu
Android-платформа обеспечивает создание трех видов меню для Android-приложения – меню опций, которое открывается при нажатии кнопки MENU устройства или для Android-версии 3.0 и выше элементы которого могут быть помещены в ActionBar-панель, контекстное меню View-компонента и подменю элемента меню.
Все три вида меню могут быть созданы программным способом или на основе XML-описания. Создание меню на основе XML-описания является предпочтительным способом, так как позволяет разделить содержимое меню и его бизнес-логику. После создания XML-описания меню для меню опций необходимо в классе Activity-компонента переопределить метод onCreateOptionsMenu (), в котором необходимо создать программный объект из XML-описания, используя метод MenuInflater.inflate (), а также переопределить метод onOptionsItemSelected (), обрабатывающий выбор элемента меню.
Для контекстного меню необходимо в методе onCreate () Activity-компонента зарегистрировать View-компонент как имеющий контекстное меню с помощью метода registerForContextMenu (), переопределить метод onCreateContextMenu (), в котором необходимо создать программный объект из XML-описания, используя метод MenuInflater.inflate (), а также переопределить метод onContextItemSelected (), обрабатывающий выбор элемента меню. Подменю элемента меню определяется простым вложением его XML-описания в тэг элемента меню.
Для создания XML-описания меню Android-приложения в окне Project Explorer нажмем правой кнопкой мышки на узле проекта и в контекстном меню выберем команду New | Other | Android | Android XML File, нажмем кнопку Next – в результате откроется окно мастера, в списке Resource Type которого выберем тип Menu.
Поле File: мастера создания Menu-файла предлагает ввести имя нового файла XML-описания меню, который затем с расширением. xml появится в каталоге res/menu Android-проекта и будет доступен в Java-коде с помощью сгенерированного класса R.menu. [имя Menu-файла] или в XML-коде с помощью ссылки @ [package: ] menu. [имя Menu-файла].