Главная » Разработка для Android » РАЗРАБОТКА ПРИЛОЖЕНИЙ ДЛЯ РАЗЛИЧНЫХ УСТРОЙСТВ – ЧАСТЬ 1

0

Вопросы, рассматриваемые в этом часе:

•             разработка дизайна для различных конфигураций мобильных телефонов;

•             реагирование на изменения ориентации экрана;

•             работа с различными версиями инструментария Android SDK.

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

УПРАВЛЕНИЕ КОНФИГУРАЦИЕЙ НА ПЛАТФОРМЕ ANDROID

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

•             Какие аппаратные возможности требуются приложению? Нужен ли приложению сенсорный экран? Аппаратная клавиатура? Многопозиционный джойстик? Экран определенных размеров?

•             Какие программные возможности требуются приложению? Поддерживает ли приложение различные ориентации экрана?

•            Какая версия инструментария Android SDK требуется приложению?

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

Использование квалификаторов в названиях каталогов ресурсов позволяет предоставить ресурсы для ряда различных конфигураций приложения (табл. 20 1). Вы можете применять эти квалификаторы названий каталогов к вложенным подкаталогам, например /res/values/. Квалификаторы присоединяются, к названию существующего подкаталога в строгом порядке, который определен в табл. 20.1. В названии каталога могут использоваться сразу несколько квалификаторов, разделенных дефисами. Квалификаторы всегда записываются строчными буквами, и название каталога может содержать только один квалификатор каждого типа. Пользовательские квалификаторы использовать нельзя.

Таблица 20.1

<tr >

Тип квалификатора каталога

Значения

Комментарии

<td > <tr >

Язык

ru, en, fr, es, zh, ja, ko,

Двухбуквенные коды языков в

<td > <tr >

 

de и т.д.

соответствии со стандартом ISO 639-1

<td > <tr >

Регион/локаль

rRu, rUS, rGB, rFR, rJP,

Код региона ISO 3166-1alpha-2,

<td > <tr >

 

rDE и т.д.

записанный ЗАГЛАВНЫМИ БУКВАМИ, перед которым указы­вается строчная буква «г»

<td > <tr >

Размеры экрана

small, normal, large

Размер экрана и коэффициент плотности размещения точек на экране

<td > <tr >

Ориентация экрана

port, land

Портретный режим, альбомный режим

<td > <tr >

Плотность размещения

ldpi, mdpi, hdpi, nodpi

Плотность размещения точек на

<td > <tr >

точек на экране

 

экране, для которой предназначен ресурс

<td > <tr >

Тип сенсорного

noutouch, stylus, finger

Сенсорный экран отсутствует, сен-

<td > <tr >

экрана

 

сорный экран, предназначенный исключительно для работы со стилусом, обычный сенсорный экран

<td > <tr >

Доступность

keysexposed,

Клавиатура доступна, клавиатура

<td > <tr >

клавиатуры

keyshidden, keyssoft

недоступна пользователю, ресурсы используются только вместе с про­граммной клавиатурой

<td > <tr >

Доступность

navexposed, navhidden

Навигационные клавиши доступны

<td > <tr >

навигационных

 

или скрыты (клавиатура телефона

<td > <tr >

клавиш

 

закрыта)

<td > <tr >

Основной метод

nonav, dpad, trackball,

Четырехпозиционный джойстик,

<td > <tr >

навигации для

whell

трекбол, колесо прокрутки

<td > <tr >

несенсорных

 

<tr >

экранов

 

<tr >

Версия инструмен-

v1, v2, v3, v4, v5, v6, v7 Идентификатор API Level версии

<tr >

тария

и т.д. инструментария SDK (например,

<tr >

SDK

значение v1 соответствует инстру­

<tr >

 

ментарию Android SDK 1.0, а также

<tr >

 

значение v7 – инструментарию

<tr >

 

Android SDK 2.1)

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

/res/values-en-rUS-port-finger

/res/drawables-en-rUS-land

/res/values-en-qwerty

И несколько примеров названий каталогов с неправильным использованием квалификаторов:

/res/values-en-rUS-rGB

/res/values-en-rUS-port-FINGER

/res/values-en-rUS-port-finger-custom

Исчерпывающий список квалификаторов, доступных для использования при настройке ресурсов (мобильный код страны, код оператора, размер экрана и так далее), можно найти на веб-сайте, посвященном разработке на платформе Android, по адресу developer.android.com/guide/topics/resources/providing- resources.html#AlternativeResources.

Поддержка различных ориентаций экрана

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

ДОБАВЛЕНИЕ АДАПТИРОВАННОГО МАКЕТА ДЛЯ АЛЬБОМНОГО РЕЖИМА

До этого момента вы разрабатывали и тестировали приложение «Been There, Done That!» в портретном режиме. Запустите приложение сейчас, переведя перед этим мобильный телефон или эмулятор в альбомный режим. Просмотрите каждый экран приложения. Вы увидите, что некоторые экраны отображаются отлично (в этих экранах применяются макеты с динамически изменяемой шириной, которые прекрасно работают как в альбомном, так и в портретном режиме), а для некоторых экранов, например игрового экрана (рис. 20.1), может потребоваться доработка.

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

•             Использовать все существующие ресурсы макетов в качестве ресурсов по умолчанию.

•             Разработать новую версию каждого макета, которая выглядела бы привлекательно в альбомном режиме.

•             Добавить все новые макеты для альбомного режима в каталог /res/ layout-land/.

Давайте попробуем выполнить необходимые шаги, создав две различные версии макета игрового экрана для приложения «Been There, Done That!» — одну версию для портретного режима (по умолчанию) и другую версию для альбомного режима.

 

Рис. 20.4. Игровой экран в альбомном режиме (используется макет, адаптированный для альбомного режиме)

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

ВНИМАНИЕ! ___________________________________________________________

Поскольку изменение ориентации экрана приводит к перезапуску текущей деятельно­сти, любые выполняющиеся задачи, например, операции декодирования изображений или сетевые операции, будут запущены снова, если вы не реализуете метод onRetainNonConfigurationInstance() класса Activity. Дополнительную информацию no ситуациям подобного рода можно найти в статье на веб-сайте, посвя­щенном разработке на платформе Android, по адресу developer. androjd.com/resources/articles/faster-screen-orientation-change.html.

ПРОСЛУШИВАНИЕ СОБЫТИЙ ИЗМЕНЕНИЯ ОРИЕНТАЦИИ ЭКРАНА

Приложения могут регистрировать слушателей дли получения событий изменения ориентации экрана. Для этого вы получаете объект типа SensorManager при помощи метода getSystemService() . Вы можете получить текущую ориентацию экрана, используя метод getOrientation() объекта типа SensorManager. В качестве альтернативного   варианта,  вы        можете           реализовать    класс

OrientationEventListener(android.view.OrientationEventListener) и переопределить метод onOrientationChanged(), чтобы зарегистрировать слушателя для получения событий изменения ориентации экрана.

Тем не менее прослушивание событий изменении ориентации требуется только в том случае, когда приложения должны выполнять специальные внутренние операции при смене ориентации экрана. Приложение, для которого определен каталог /res/layout-land/ с ресурсами макетов для альбомного режима и каталог /res/layout/ с ресурсами макетов для портретного режима, используемыми по умолчанию, будет работать, не вызывая каких либо проблем, даже без слушателя событий изменения ориентации экрана.

ЗНАЕТЕ ЛИ ВЫ, ЧТО… __________________________________________________

Литература: Дэрси JI., Android за 24 часа. Программирование приложений под операционную систему Google/ ДэрсиЛ., КондерШ. — М.: Рид Групп, 2011. — 464 с. — (Профессиональные компьютерные книги). ISBN 978-5-4252-0318-2

По теме:

  • Комментарии