
- •Глава 4
- •ViewGroup. Правильное использование разметки чрезвычайно важно при
- •Знакомство с Представлениями
- •ViewGroup — это производный от View класс, спроектированный для
- •Знакомство с менеджерами компоновки
- •Использование разметки
- •Оптимизация разметки
- •Изменение существующих Представлений
- •5. Чтобы отобразить лист, переопределите метод onDraw и нарисуйте
- •Создание нового графического интерфейса
- •Внимание
- •10 Dp и такой же толщины контур. Результат представлен на рис. 4.3.
- •LayerDrawable
- •StateListDrawable
- •LevelListDrawable
- •ImageView.SetImageLevel(5);
- •Ресурс NinePatch
- •800 480 И 854 480). Точно так же физические размеры экрана начинаются
ImageView.SetImageLevel(5);
Представление отобразит ресурс с соответствующим (или большим)
индексом. Ресурс LevelListDrawable нужен при компоновке виджетов.
Ресурс NinePatch
Изображения формата NinePatch (растягивающиеся) — это PNG-файлы,
где некоторые помеченные части могут быть растянуты. Они должны опи-
сываться в формате PNG и иметь расширение .9.png. Идентификатор
ресурсов для NinePatch — это имя файла без окончания .9.png.
NinePatch — разновидность PNG-файлов, которые содержат рамку тол-
щиной в один пиксел. Данная рамка описывает область, которая может
растягиваться при изменении размеров изображения. Чтобы создать ресурс
NinePatch, нарисуйте по его левому и верхнему краям изображения черные
полоски толщиной в один пиксел, описывающие растягиваемый участок.
Части рисунка, не отмеченные подобным образом, останутся прежними;
изменения размеров изображения будут пропорционально влиять на от-
носительные размеры помеченных участков.
ПРИМЕЧАНИЕ
Ресурс NinePatch — мощный инструмент, способный создавать фоновые
изображения для Представлений или Активностей, размеры которых
могут меняться. К примеру, NinePatch используется в Android при соз-
дании обрамления для кнопок.
169 бет
Интерфейсы, не зависящие
от разрешения и плотности пикселов
Поскольку первые четыре мобильных телефона под управлением Android
имели экраны размером 3,2 и разрешение HVGA, разработчики могли соз-
давать пользовательские интерфейсы без особых трудностей. Почти через
год после выпуска первого телефона с Android при проектировании нужно
было учитывать всего лишь один размер экрана и одно значение плотности
пикселов для него.
Период с конца 2009-го по начало 2010 года ознаменовался бурным
ростом количества устройств, на которых работает Android. А вместе с воз-
росшим разнообразием телефонов увеличилось и разнообразие размеров
экранов и плотности пикселов.
При разработке пользовательского интерфейса важно помнить, что
ваши приложения будут работать на широком спектре устройств с разны-
ми типами экранов (включая HVGA, QVGA и две разновидности WVGA:
800 480 И 854 480). Точно так же физические размеры экрана начинаются
с 3,2, включая 3,7-дюймовые Nexus One и Motorola Droid и 4-дюймовый
Sony Ericsson Xperia X10.
Теперь, когда Android стал популярным, вы должны создавать свои при-
ложения с оглядкой на еще большее количество всевозможных устройств,
в перспективе это могут быть планшетные компьютеры, нетбуки и бытовая
электроника.
Следующие разделы начинаются с описания типов экранов, которые
нужно учитывать. Вы узнаете, как обеспечить их поддержку, и получите
рекомендации по созданию приложений, которые не зависят от разре-
шения и плотности пикселов. В завершение научитесь тестировать свои
программы на различных экранах, не имея физического доступа к теле-
фонам.
Фреймворк для управления ресурсами
и интерфейсы, не зависящие
от разрешения экрана
Android предоставляет методы, с помощью которых вы можете оптими-
зировать пользовательский интерфейс для экранов с различными размерами
и плотностью пикселов.
В этом разделе описываются спецификаторы для каталогов с ресурсами,
которые можно использовать, чтобы хранить разные значения и экземпляры
разметки для разных экранных конфигураций, а также элементы манифе-
ста — с их помощью можно ограничить размеры экранов, поддерживаемые
вашим приложением.
170 бет
Спецификаторы ресурсов для указания размеров экрана
и плотности пикселов
В главе 3 вы познакомились с фреймворком для управления ресурсами
в Android. Используя этот фреймворк, можно создавать одновременно не-
сколько структур каталогов, чтобы хранить внешние ресурсы для различных
аппаратных конфигураций.
В этом разделе кратко описываются спецификаторы для имен тех ка-
талогов, которые можно использовать при добавлении альтернативных
ресурсов, чтобы поддерживать разные характеристики экрана, такие как
размер, плотность пикселов и соотношение сторон.
• Размер экрана. Размер экрана относительно ≪стандартного≫ смарт-
фона (например, G1 или Droid):
small — экран меньший, чем стандартные 3,2;
medium — типичный размер экрана смартфона;
large — экран значительно больший, чем у типичного смартфона
(например, экран планшетного компьютера или нетбука).
• Плотность пикселов. Описывает плотность пикселов на экране. Как
правило, измеряется в точках на квадратный дюйм (dpi) и зависит от
размеров экрана и его разрешения:
ldpi — предназначен для хранения ресурсов, рассчитанных на экра-
ны с низкой плотностью пикселов (100–140 dpi);
mdpi — для экранов со средней плотностью пикселов (140–180 dpi);
hdpi — для экранов с высокой плотностью пикселов (190–250 dpi);
nodpi — для ресурсов, которые не должны масштабироваться, в за-
висимости от плотности пикселов на экране устройства.
• Соотношение сторон. Описывает отношение высоты экрана к его
ширине:
long — для экранов, которые в альбомном режиме значительно
шире, чем на стандартных смартфонах (таких как G1);
notlong — для экранов с обычным соотношением сторон.
Каждый из этих спецификаторов может быть использован в комбина-
ции с любым другим или независимо от остальных, как показано в ли-
стинге 4.24.
Обратите внимание, что данные спецификаторы могут применяться
в сочетании с теми, что описывались в главе 3.
171 бет
Листинг 4.24. Спецификаторы для каталогов, основанные на свойствах экрана
res/layout-small-long/ // Разметка для маленьких, длинных экранов.
res/layout-large/ // Разметка для больших экранов.
res/drawable-hdpi/ // Ресурсы Drawable для экранов с высокой
плотностью пикселов.
Определение поддерживаемых экранных размеров
Пользовательский интерфейс некоторых приложений просто не по-
лучится оптимизировать для всех возможных типов экранов. Вы можете
использовать тег <supports-screens> в манифесте, чтобы указать, на
устройствах с какими экранами может работать ваша программа. Данный
подход демонстрируется в листинге 4.25.
Листинг 4.25. Элемент манифеста, описывающий поддержку нормальных
и больших экранов
<supports-screens
android:smallScreens="false"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true"
/>
В данном случае маленьким экраном можно назвать любой дисплей с раз-
решением меньше, чем HVGA. Под большим экраном подразумевается та-
кой, который значительно больше, чем у смартфона (например, у планшетных
компь ютеров). Экран нормальных размеров имеет большинство смартфонов.
Атрибут anyDensity говорит о том, каким образом ваше приложение
будет масштабироваться при отображении на устройствах с разной плотно-
стью пикселов. Если вы учитываете это свойство экрана в своем интерфейсе
(а делать это необходимо), установите этому атрибуту значение true.
При значении false Android будет использовать режим совместимости,
пытаясь корректно масштабировать пользовательский интерфейс прило-
жения. Как правило, это снижает качество изображения и приводит к ар-
тефактам при масштабировании.
Для приложений, собранных с помощью SDK с API level 4 и выше, этот
атрибут по умолчанию имеет значение true.
Рекомендации по разработке интерфейсов,
не зависящих от разрешения
Помимо захватывающих возможностей, предоставляемых широким раз-
нообразием устройств под управлением Android, разработчик приложений
не застрахован и от потенциальных опасностей.__