Главная » Разработка для Android » Визуальные стили и темы

0

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

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

Чтобы  создать стиль, используйте тег <style>, включающий  атри- бут name, а также один или несколько  вложенных  узлов item. Каждый тег item, в свою очередь, также должен иметь атрибут name, содержащий  тип описываемого значения (например, размер шрифта или цвет). Внутри тега должно храниться само значение. Пример описания визуального стиля по- казан в следующем фрагменте:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="StyleName">

<item name="attributeName">value</item>

</style>

</resources>

Тег <style> поддерживает наследование с помощью атрибута parent, благодаря чему стили можно свободно варьировать.

В следующем примере демонстрируются два стиля (могут быть исполь- зованы  в качестве  визуальной темы): базовый,  описывающий несколько свойств  для текста, и дочерний,  изменяющий ранее заданный  шрифт  на более мелкий:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="BaseText">

<item name="android:textSize">14sp</item>

<item name="android:textColor">#111</item>

</style>

<style name="SmallText" parent="BaseText">

<item name="android:textSize">8sp</item>

</style>

</resources>

Ресурсы Drawable

Ресурсы  Drawable  содержат  растровые  и растягиваемые (NinePatch) изображения. В эту категорию также входят сложные композитные ресур- сы, такие как LevelListDrawables и StateListDrawables, которые могут быть описаны в формате XML.

Композитные ресурсы и изображения NinePatch более подробно рас- сматриваются в следующей главе.

Все ресурсы Drawable  хранятся в виде отдельных  файлов  в каталоге res/drawable. Идентификаторами для них служат  имена файлов  в нижнем регистре без расширения.

ПРИМЕЧАНИЕ

Предпочтительный формат для растровых ресурсов — PNG, но JPEG

и GIF также поддерживаются.

Разметка

Ресурсы с разметкой (или менеджеры компоновки) позволяют отделять уровень представления от бизнес-логики. С помощью разметки вы можете проектировать пользовательские интерфейсы в формате XML, вместо того чтобы описывать  их в коде программы.

Чаще всего разметка применяется при описании пользовательского ин- терфейса для Активности. Создав разметку в формате XML, можно загрузить ее в Активность с помощью метода setContentView (как  правило,  внутри обработчика  onCreate). Вы также можете получать ссылки на экземпляры разметки, содержащиеся в других ресурсах (например, разметка для каждой строки в элементе ListView). Более подробная информация об использова- нии и создании разметки  внутри Активностей — в главе 4.

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

Каждый  ресурс, описывающий разметку, хранится  в отдельном  файле в каталоге res/layout. Имя файла выступает как идентификатор ресурса.

Исчерпывающее описание менеджеров компоновки и элементов интер- фейса содержится в следующей главе, но в качестве примера в листинге 3.2 представлен ресурс, добавленный мастером создания проектов. Он содержит разметку  LinearLayout (описана в главе 4), которая  выступает  в качестве контейнера  для элемента  TextView,  отображающего  приветствие Hello World!.

Листинг 3.2. Разметка с приветствием Hello World!

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"

android:layout_width="fill_parent" android:layout_height="fill_parent">

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World!"

/>

</LinearLayout>

Анимация

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

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

Анимация, основанная на расчете промежуточных кадров. Каждый эк- земпляр анимации данного типа хранится в отдельном XML-файле внутри каталога res/anim. Аналогично разметке и объектам Drawable имена файлов с описанием  анимации  служат идентификаторами для ресурсов.

Анимацию можно задать в виде изменений параметров alpha (затемне- ние), scale (масштабирование), translate (перемещение) или rotate (поворот).

В табл. 3.1 приведены  допустимые  атрибуты  и значения,  которые под- держиваются при описании анимации.

Таблица 3.1. Атрибуты для описания  анимации

Тип анимации

Атрибуты

Допустимые значения

Alpha

fromAlpha/toAlpha

Значения типа Float от 0 до 1

Scale

fromXScale/toXScale

Значения типа Float от 0 до 1

fromYScale/toYScale

Значения типа Float от 0 до 1

pivotX/pivotY

Описывает центральную  точку масштабирования в процентах от ширины/высоты — от 0 % до 100 %

Translate

fromX/toY

Значения типа Float от 0 до 1

fromY/toY

Значения типа Float от 0 до 1

Rotate

fromDegrees/toDegrees

Значения типа Float от 0 до 360 °

pivotX/pivotY

Описывает опорную точку для поворота в процентах от ширины/высоты — от 0 % до 100 %

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

Перечислим некоторые атрибуты, доступные для тега set:

duration — продолжительность анимации  в миллисекундах;

startOffset — миллисекундная задержка перед началом анимации;

fillBefore — установите  значение  true,  чтобы применить  преоб- разование перед началом анимации;

fillAfter — установите  значение  true, чтобы применить  преобра- зование после завершения анимации;

interpolator — описывает изменения в скорости эффекта. Доступные виды интерполяции рассматриваются в главе 15. Чтобы ис-

пользовать один из них, укажите ссылку на системный ресурс с анимацией вида android:anim/interpolatorName.

ПРИМЕЧАНИЕ

Если не использовать атрибут startOffset, все анимационные эффекты внутри набора воспроизводятся одновременно.

В следующем  примере  показан  анимационный набор, с помощью ко- торого целевой элемент одновременно поворачивается на 360°, сжимается и исчезает:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator">

<rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" android:startOffset="500" android:duration="1000" />

<scale android:fromXScale="1.0" android:toXScale="0.0" android:fromYScale="1.0" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="500" android:duration="500" />

<alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:startOffset="500" android:duration="500" />

</set>

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

В отличие от анимации, основанной на расчете промежуточных кадров, пошаговая хранится в виде ресурсов Drawable в каталоге res/drawable. Имена файлов  (без расширения .xml) используются в качестве  идентифика- торов.

В следующем фрагменте представлена простая анимация, в ходе кото- рой происходит перебор последовательности растровых ресурсов и вывод каждого из них на экран (отображаются полсекунды). Чтобы использовать этот пример,  необходимо  создать  три новых ресурса  с изображениями rocket (1, 2, 3).

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">

<item android:drawable="@drawable/rocket1" android:duration="500" />

<item android:drawable="@drawable/rocket2" android:duration="500" />

<item android:drawable="@drawable/rocket3" android:duration="500" />

</animation-list>

Меню

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

дальнейшему повышению автономности уровня представления вашей про- граммы.

Данный вид ресурсов может использоваться для описания как главного (принадлежащего Активности), так и контекстного меню, и предоставляет те же свойства, какие доступны при создании меню программным  способом. Меню, описанное в формате XML, загружается в виде программного объ- екта с помощью метода inflate, принадлежащего Сервису MenuInflator. Как правило, это происходит внутри обработчика onCreateOptionsMenu. Больше подробностей  смотрите в главе 4.

Описание каждого экземпляра меню хранится в отдельном файле в ката- логе res/menu. Имена файлов автоматически становятся идентификаторами ресурсов. Именно  такой способ определения меню наиболее предпочти- телен в Android.

Исчерпывающее описание свойств меню содержится в следующей главе. В листинге 3.3 представлен простой пример.

Листинг 3.3. Описание  простого ресурса с меню

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/menu_refresh" android:title="Refresh" />

<item android:id="@+id/menu_settings"

android:title="Settings" />

</menu>

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

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