Программирование Android Типы ресурсов приложения Android Sun, October 22 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Типы ресурсов приложения Android Печать
Добавил(а) microsin   

Здесь описываются способы применения, формат и синтаксис основных типов ресурсов приложения Android, которые Вы можете предоставить в каталоге проекта res (это относится как к Eclipse, так и к Android Studio). Далее приведен перевод документации [1]. См. также "Предоставление ресурсов" и "Доступ к ресурсам" [2, 3]. Все незнакомые сокращения и термины ищите в Словарике [5].

[Animation Resources]

Здесь задаются ресурсы для анимации. Tween-анимации (анимации с использованием промежуточных кадров) сохраняются в папке res/anim/, и к ним осуществляется доступ с помощью класса R.anim. Frame-анимации (покадровые анимации) сохраняются в папку res/drawable/ (доступ через класс R.drawable).

Ресурс анимации может задать 2 типа анимаций:

Property Animation (анимация свойства). В этом случае анимация происходит через модификацию значений свойств объекта через установленный период времени с использованием класса Animator.

View Animation (анимация представления). Этот тип включает в себя еще 2 подтипа анимаций, которые Вы можете создать в рабочем окружении view:

Tween animation: анимация создается через серию преобразований одной картинки в классе Animation.
Frame animation: в этом случае анимация будет показана как последовательность чередующихся друг за другом изображений, что делается с помощью класса AnimationDrawable.

[Property Animation]

Анимация создается в файле XML. Она будет модифицировать свойства целевого объекта в определенные промежутки времени. Модифицируемыми свойствами могут быть, к примеру, цвет заднего плата (background color) или значение alpha.

Файл XML размещается в res/animator/filename.xml (filename используется как идентификатор имени ресурса, resource ID).

Компилируемый тип данных ресурса: указатель ресурса на ValueAnimator, ObjectAnimator или AnimatorSet.

К ресурсу из Java обращаются через R.animator.filename, в XML через @[package:]animator/filename

Синтаксис:

< set
  android:ordering=["together" | "sequentially"]>
< objectAnimator android:propertyName="string" android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["repeat" | "reverse"] android:valueType=["intType" | "floatType"]/>
< animator android:duration="int" android:valueFrom="float | int | color" android:valueTo="float | int | color" android:startOffset="int" android:repeatCount="int" android:repeatMode=["repeat" | "reverse"] android:valueType=["intType" | "floatType"]/>
< set > ... < /set > < /set >

XML-файл должен иметь один корневой элемент: либо < set >, либо < objectAnimator >, либо < valueAnimator >. Вы можете группировать элементы анимации друг с другом внутри элемента < set >, включая другие элементы < set >.

Описание элементов

< set > Переводится как "набор". Контейнер, который содержит другие элементы анимации (< objectAnimator >, < valueAnimator >, или другие элементы < set >). Представляет класс AnimatorSet.

Вы можете применять вложенные теги < set >, чтобы группировать друг с другом будущие анимации. Каждый < set > может задать свою последовательность атрибутов. Атрибут может быть:

android:ordering это ключевое слово, которое задает порядок проигрывания анимаций в этом наборе set.

ЗначениеОписание
sequentially Последовательно проигрывает анимации в этом set.
together (по умолчанию) В этом set анимации проигрываются одновременно.

< objectAnimator > этот элемент анимирует указанное свойство объекта с заданными интервалами времени. Представляет класс ObjectAnimator. Атрибуты:

android:propertyName обязательный атрибут, указанный в виде строки. Задает свойство объекта для анимирования по его имени. Например, можно указать "alpha" или "backgroundColor" для объекта View. Элемент objectAnimator не представляет целевой атрибут, однако Вы не можете установить анимацию объекта простым объявлением в XML. Вы должны расширить свой ресурс анимации XML путем вызова loadAnimator() и вызова setTarget() для установки целевого объекта, содержащего это свойство.

android:valueTo обязательный атрибут (float, int, или цвет color). Конечное значение анимируемого свойства. Цвета задаются шестью шестнадцатеричными цифрами (например #333333).

android:valueFrom то же самое, что и valueTo, но задает начальное значение анимируемого свойства.

android:duration int, время в миллисекундах для анимации. Если не указано, то по умолчанию 300 мс.

android:startOffset int, время в миллисекундах для задержки анимации после вызова start().

android:repeatCount int, сколько раз нужно повторить анимацию. Установите в "-1" для бесконечного повторения, или укажите здесь любое положительное число. Например значение "1" означает, что анимация будет проиграна 1 раз после первоначального запуска, так что всего анимация проиграется 2 раза. Если ничего не указать, то значение по умолчанию "0", что означает отсутствие повторов.

android:repeatMode int, задает, как анимация ведет себя после того, как достигнет конечной точки valueTo. Атрибут android:repeatCount должен быть установлен в положительное значение, или "-1" (но не в "0"), чтобы атрибут repeatMode имел какое-то значение. Установка в "reverse" приведет к тому, что анимация поменяет направление с каждой итерацией. Установка в "repeat" приведет к повтору анимации с начала.

android:valueType ключевое слово. Не указывайте этот атрибут, если значение является цветом. Рабочее окружение анимации обрабатывает значение цветов автоматически.

ЗначениеОписание
intType Указывает, что анимированные значения являются целочисленными (integer).
floatType (по умолчанию) Указывает, что анимированные значения это число с плавающей запятой (float).

< animator > этот элемент выполняет анимацию через указанные интервалы времени. Представляет класс ValueAnimator. Атрибуты те же самые, что и у элемента < objectAnimator >.

Пример: файл XML, сохраненный в res/animator/property_animator.xml:

< set android:ordering="sequentially" >
    < set >
        < objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        < objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    < /set >
    < objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
< /set >

Чтобы запустить эту анимацию, Вы должны расширить ресурсы XML в коде до объекта AnimatorSet, и затем установить целевые объекты для всех анимаций перед запуском набора animation set. Вызов setTarget() устанавливает один целевой объект для всех дочерних объектов AnimatorSet. Следующий код демонстрирует, как это делается:

AnimatorSet set = 
   (AnimatorSet)AnimatorInflater.loadAnimator(myContext,R.anim.property_animator);
set.setTarget(myObject);
set.start();

См. также:

Property Animation site:developer.android.com.
API Demos, Samples site:developer.android.com для примеров, как использовать систему анимации свойства.

[View Animation]

Фреймворк view animation поддерживает оба типа анимаций "tween" и "frame by frame", и тот и другой тип декларируется в XML. Далее описываются оба этих вида анимаций.

Анимация Tween задается в XML, и выполняет такие преобразования как поворот, затенение (fading), перемещение (moving) и растягивание/сжатие (stretching) для элементов графики.

Файл XML размещается в res/anim/filename.xml (filename используется как идентификатор имени ресурса, resource ID).

Компилируемый тип данных ресурса: указатель ресурса на Animation.

К ресурсу из Java обращаются через R.anim.filename, в XML через @[package:]anim/filename

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    < alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    < scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    < translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    < rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    < set >
        ...
    < /set >
< /set >

XML-файл должен иметь один корневой элемент: либо < alpha >, либо < scale >, либо < translate >, либо < rotate >, либо < set >. Элемент < set > может содержать в себе группу (или группы) других элементов анимации (включая вложенные элементы < set >).

Описание элементов

< set > Переводится как "набор". Контейнер, который содержит другие элементы анимации (< alpha >, < scale >, < translate >, < rotate >, или другие элементы < set >). Представляет класс AnimationSet. Атрибуты:

android:interpolator интерполятор ресурса для применения к анимации. Значение интерполятора должно быть ссылкой на ресурс, который описывает interpolator (но не имя класса interpolator). Есть ресурсы интерполятора по умолчанию, доступные с платформы, или Вы можете создать свой собственный ресурс интерполятора. Обсуждение интерполяции см. далее.

android:shareInterpolator тип Boolean. Укажите "true", если хотите использовать один и тот же интерполятор среди всех дочерних элементов.

< alpha > Применяется для анимации плавного появления (fade-in) или плавного ухода в тень (fade-out). Представляет класс AlphaAnimation. Атрибуты:

android:fromAlpha Float. Указывает начальное значение для непрозрачности (opacity), где 0.0 соответствует полной прозрачности (transparent) и 1.0 соответствует полной непрозрачности (opaque).

android:toAlpha Float. То же самое, что и fromAlpha, но соответствует конечному смещению для непрозрачности.

Информацию по дополнительным атрибутам, которые поддерживаются элементом < alpha >, см. в документации на класс Animation (у которого все XML-атрибуты унаследованы этим элементом).

< scale > применяется в качестве анимации изменения размера. Вы можете указать центральную точку изображения, от которой оно будет увеличиваться (или уменьшаться), по координатам pivotX и pivotY. Например, если эти значения 0, 0 (соответствуют верхнему левому углу), то все увеличения размера будут происходить вниз и направо. Представляет класс ScaleAnimation. Атрибуты:

android:fromXScale Float. Начальное смещение размера по X, где 1.0 соответствует отсутствию изменения.

android:toXScale Float. То же самое, что и fromXScale, но задает конечное смещение размера X.

android:fromYScale Float. То же самое, но соответствует начальному смещению размера Y, где 1.0 означает отсутствие изменения.

android:toYScale Float. То же самое, что и fromYScale, но соответствует конечному смещению размера по Y.

android:pivotX Float. Задает координату X, которая останется фиксированной на объекте, когда у него будут меняться размеры.

android:pivotY Float. Задает координату Y, которая останется фиксированной на объекте, когда у него будут меняться размеры.

Информацию по дополнительным атрибутам, которые поддерживаются элементом < scale >, см. в документации на класс Animation (у которого все XML-атрибуты унаследованы этим элементом).

< translate > движение по вертикали и/или по горизонтали. Поддерживает следующие атрибуты, указанные в любом из 3 форматов: значения от -100 до 100, заканчивающиеся "%", что означает процентное изменение относительно собственного положения; значения от -100 до 100, оканчивающиеся на "%p", означают процентное положение относительно родителя; значение float без суффикса указывает на абсолютное значение. Представляет класс TranslateAnimation. Атрибуты:

android:fromXDelta Float или проценты, означает начальное смещение по X. Выражается также: в пикселях относительно нормального положения (как например "5"), в процентах относительно ширины элемента (как например "5%"), или в процентах относительно ширины родителя (как например "5%p").

android:toXDelta Float или проценты, означает конечное смещение по X. Формат тот же самый.

android:fromYDelta Float или проценты, означает начальное смещение по Y. Выражается также: в пикселях относительно нормального положения (как например "5"), в процентах относительно высоты элемента (как например "5%"), или в процентах относительно высоты родителя (как например "5%p").

android:toYDelta Float или проценты, означает конечное смещение по Y. Формат тот же самый.

< rotate > анимация поворота. Представляет класс RotateAnimation. Атрибуты:

android:fromDegrees Float, начальная угловая позиция в градусах.

android:toDegrees Float, конечная угловая позиция в градусах.

android:pivotX Float или проценты. Координата X для центра поворота. Выражается либо в пикселах относительно левого края объекта (например "5"), либо в процентах относительно левого края объекта (например "5%"), либо в процентах относительно левого края содержащего объект родителя (например "5%p").

android:pivotY Float или проценты. То же самое, pivotX, но для координаты Y центра вращения. Координата отсчитывается относительно верхнего края.

Информацию по дополнительным атрибутам, поддерживаемым элементом < rotate >, можно посмотреть в документации на класс Animation (у которого все атрибуты унаследованы этим элементом).

Пример: XML сохранен в файл res/anim/hyperspace_jump.xml:

< set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >
    < scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    < set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700">
        < scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        < rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    < /set >
< /set >

Код приложения привяжет анимацию к ImageView и запустит её:

ImageView image = (ImageView)findViewById(R.id.image);
Animation hyperspaceJump =
     AnimationUtils.loadAnimation(this,R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);

См. также View Animation site:developer.android.com (2D Graphics: Tween Animation).

[Интерполяторы]

Интерполятор (interpolator) является модификатором анимации, определенной в XML, и влияет на скорость изменений в анимации. Это позволит Вам поменять существующую анимацию: ускорить, замедлить её, повторить несколько раз, и т. д.

Интерполятор привязывается к элементу анимации через атрибут android:interpolator, значение которого является ссылкой на ресурс интерполятора.

Все интерполяторы, доступные в Android, являются подклассами от класса Interpolator. Для каждого класса интерполятора Android включает публичный ресурс (public resource), на который Вы можете сделать ссылку, чтобы применить интерполятор к анимации с использованием атрибута android:interpolator. Следующая таблица определяет ресурс, чтобы использовать для каждого интерполятора:

Класс InterpolatorИдентификатор ресурса (Resource ID)
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

Здесь показано, как Вы можете применить один из ресурсов и атрибутом android:interpolator:

< set android:interpolator="@android:anim/accelerate_interpolator" >
    ...
< /set >

Вручную созданные интерполяторы

Если Вас не устраивают готовые интерполяторы, предоставленные платформой (ни один из перечисленных в таблице выше), то можете создать собственный ресурс интерполятора с модифицированными атрибутами. Например, Вы можете подстроить уровень ускорения AnticipateInterpolator, или скорректировать количество циклов в CycleInterpolator. Чтобы выполнить это, Вам нужно создать отдельный файл XML для ресурса interpolator.

Файл XML размещается в res/anim/filename.xml (filename используется как идентификатор имени ресурса, resource ID).

Компилируемый тип данных ресурса: указатель ресурса на соответствующий объект интерполятора.

К ресурсу из XML обращаются через @[package:]anim/filename

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

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

Описание элементов

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

< accelerateDecelerateInterpolator > скорость изменения начинается и медленно заканчивается, но ускоряется посередине. Без атрибутов.

< accelerateInterpolator > скорость изменения вначале медленная, но затем ускоряется. Атрибуты:

android:factor Float. Уровень ускорения (по умолчанию 1).

< anticipateInterpolator > изменение запускается назад и затем бросается вперед. Атрибуты:

android:tension Float. Величина применяемой напряженности (по умолчанию 2).

< anticipateOvershootInterpolator > Изменение запускается назад, затем бросается вперед, превышает целевое значение и затем устанавливается на конечной величине. Атрибуты:

android:tension Float. Величина применяемой напряженности (по умолчанию 2).

android:extraTension Float. Величина, на которую умножается напряженность (по умолчанию 1.5).

< bounceInterpolator > Изменение в конце возвращается (подпрыгивание). Атрибутов нет.

< cycleInterpolator > анимация повторяется указанное количество циклов. Уровень изменения следует синусоидальному образцу. Атрибуты:

android:cycles Integer. Количество циклов (по умолчанию 1).

< decelerateInterpolator > уровень изменений начинается быстро, затем изменения замедляются. Атрибуты:

android:factor Float. Уровень замедления (по умолчанию 1).

< linearInterpolator > Скорость изменения постоянная. Атрибутов нет.

< overshootInterpolator > изменение бросается вперед и превышает последнее значение, затем возвращается обратно. Атрибуты:

android:tension Float. Величина применяемой напряженности (по умолчанию 2).

Пример: XML сохранен в файл res/anim/my_overshoot_interpolator.xml:

< ?xml version="1.0" encoding="utf-8"? >
< overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

В этом XML анимации будет применен интерполятор:

< scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

Анимация Frame также задается в XML, и работает как показ последовательности изображений (точно так же, как устроен классический кинематограф).

Файл XML размещается в res/drawable/filename.xml (filename используется как идентификатор имени ресурса, resource ID).

Компилируемый тип данных ресурса: указатель ресурса на AnimationDrawable.

К ресурсу из Java обращаются через R.drawable.filename, в XML через @[package:]drawable.filename

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true false" >
    < item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
< /animation-list >

Описание элементов

< animation-list > этот элемент обязателен, и должен быть корневым. Содержит список из одного или большего количества элементов < item >. Атрибуты:

android:oneshot Boolean. Значение "true", если Вы хотите проиграть анимацию только 1 раз; "false" установит бесконечную циклическую анимацию.

< item > описывает один кадр (frame) анимации. Этот элемент должен быть дочерним для элемента < animation-list >. Атрибуты:

android:drawable указывает рисуемый (drawable) ресурс. Используется для отрисовки этого кадра.

android:duration Integer. Длительность, сколько времени будет показан этот кадр, в миллисекундах.

Пример: XML сохранен в файл res/anim/rocket.xml:

< ?xml version="1.0" encoding="utf-8"? >
< animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >
    < item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    < item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    < item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
< /animation-list >

Код приложения установит эту анимацию как задний план (background) для View, затем запустит анимацию:

ImageView rocketImage = (ImageView)findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable)rocketImage.getBackground();
rocketAnimation.start();

См. также View Animation site:developer.android.com (2D Graphics: Frame Animation).

[Ресурс Color]

Color - это целое число, кодирующее цвет. Ресурс цвета Color - это же целое число, которое задано в XTML. Цвет указывается виде значения RGB и канала альфа (alpha channel - число, которое кодирует прозрачность цвета). Вы можете использовать ресурс цвета в любом месте, которое принимает значение цвета в шестнадцатеричном виде. Вы также можете использовать ресурс цвета там, где подразумевается использование в XML рисуемого (drawable) ресурса - например, android:drawable="@color/green".

Значение цвета всегда начитается с символа фунта (pound, #), за которым следуют HEX-символы информации Alpha-Red-Green-Blue. Форматы кодирования следующие:

• #RGB
• #ARGB
• #RRGGBB
• #AARRGGBB

Примечание: цвет является простым ресурсом, к значению которого обращаются по значению, указанному в имени name атрибута (имя файла XML в этом обращении никак не участвует, т. е. имя файла XML может быть любым, лишь бы файл размещался в папке res/values). Вы также можете объединить ресурсы цвета вместе с другим простыми ресурсами в одном файле XML и в пределах одного элемента < resources >.

Файл XML размещается в res/values/colors.xml (вместо colors.xml может быть любое имя файла, лишь бы оно имело расширение xml). Имя name в элементе < color > будет использоваться в качестве идентификатора ресурса (resource ID). К ресурсу из Java обращаются через R.color.имя_цвета, в XML через @[package:]color/имя_цвета.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< resources >
    < color
        name="color_name"
        >имя_цвета< /color >
< /resources >

Описание элементов:

< resources > обязательный элемент. Этот элемент должен быть корневым. Атрибуты в этом элементе отсутствуют.

< color > элемент задает цвет в формате, как было описано выше. Атрибуты:

name строка, задающее имя цвета. Это имя будет использоваться как идентификатор ресурса (resource ID).

Пример файла ресурса цвета, файл сохранен в папку res/values/colors.xml проекта:

< ?xml version="1.0" encoding="utf-8"? >
< resources >
    < color name="Black">#000000< /color >
    < color name="Gunmetal">#2C3539< /color >
    < color name="Midnight">#2B1B17< /color >
    < color name="BlackCat">#413839< /color >
    < color name="GrayWolf">#504A4B< /color >
    < color name="GrayDolphin">#5C5858< /color >
    < color name="CloudyGray">#6D6968< /color >
    < color name="SmokeyGray">#726E6D< /color >
    < color name="Gray">#736F6E< /color >
    < color name="Granite">#837E7C< /color >
    < color name="Platinum">#E5E4E2< /color >
    < color name="MetallicSilver">#BCC6CC< /color >
    < color name="BlueGray">#98AFC7< /color >
    < color name="DarkBlue">#0000A0< /color >
    < color name="SteelBlue">#4863A0< /color >
    < color name="NavyBlue">#000080< /color >
    < color name="LightSteelBlue">#728FCE< /color >
    < color name="OceanBlue">#2B65EC< /color >
    < color name="SkyBlue">#6698FF< /color >
    < color name="DeepSkyBlue">#3BB9FF< /color >
    < color name="LightSkyBlue">#82CAFA< /color >
    < color name="SeaBlue">#C2DFFF< /color >
    < color name="Water">#EBF4FA< /color >
    < color name="Azure">#F0FFFF< /color >
    < color name="LightAquamarine">#93FFE8< /color >
    < color name="Aquamarine">#7FFFD4< /color >
    < color name="BlueLagoon">#8EEBEC< /color >
    < color name="LightSeaGreen">#3EA99F< /color >
    < color name="MediumAquamarine">#348781< /color >
    < color name="SeaGreen">#4E8975< /color >
    < color name="CamouflageGreen">#78866B< /color >
    < color name="DarkForrestGreen">#254117< /color >
    < color name="MediumSeaGreen">#306754< /color >
    < color name="MediumForestGreen">#347235< /color >
    < color name="ForestGreen">#4E9258< /color >
    < color name="LimeGreen">#41A317< /color >
    < color name="YellowGreen">#52D017< /color >
    < color name="DarkSeaGreen">#8BB381< /color >
    < color name="SaladGreen">#A1C935< /color >
    < color name="Lime">#00FF00< /color >
    < color name="Green">#008000< /color >
    < color name="TeaGreen">#CCFB5D< /color >
    < color name="GreenYellow">#B1FB17< /color >
    < color name="SlimeGreen">#BCE954< /color >
    < color name="Goldenrod">#EDDA74< /color >
    < color name="HarvestGold">#EDE275< /color >
    < color name="SunYellow">#FFE87C< /color >
    < color name="Yellow">#FFFF00< /color >
    < color name="CornYellow">#FFF380< /color >
    < color name="Parchment">#FFFFC2< /color >
    < color name="Cream">#FFFFCC< /color >
    < color name="LemonChiffon">#FFF8C6< /color >
    < color name="Cornsilk">#FFF8DC< /color >
    < color name="Beige">#F5F5DC< /color >
    < color name="AntiqueWhite">#FAEBD7< /color >
    < color name="BlanchedAlmond">#FFEBCD< /color >
    < color name="Vanilla">#F3E5AB< /color >
    < color name="RubberDuckyYellow">#FFD801< /color >
    < color name="BrightGold">#FDD017< /color >
    < color name="GoldenBrown">#EAC117< /color >
    < color name="Beer">#FBB117< /color >
    < color name="BrownSugar">#E2A76F< /color >
    < color name="SchoolBusYellow">#E8A317< /color >
    < color name="Gold">#D4A017< /color >
    < color name="Sand">#C2B280< /color >
    < color name="Khaki">#ADA96E< /color >
    < color name="Bronze">#CD7F32< /color >
    < color name="Wood">#966F33< /color >
    < color name="ArmyBrown">#827B60< /color >
    < color name="Coffee">#6F4E37< /color >
    < color name="BrownBear">#835C3B< /color >
    < color name="RedDirt">#7F5217< /color >
    < color name="Chocolate">#C85A17< /color >
    < color name="Red">#FF0000< /color >
    < color name="RedWine">#990012< /color >
    < color name="Burgundy">#8C001A< /color >
    < color name="BloodRed">#7E3517< /color >
    < color name="Sangria">#7E3817< /color >
    < color name="KhakiRose">#C5908E< /color >
    < color name="DesertSand">#EDC9AF< /color >
    < color name="Pink">#FAAFBE< /color >
    < color name="Magenta">#FF00FF< /color >
    < color name="Indigo">#4B0082< /color >
    < color name="Grape">#5E5A80< /color >
    < color name="DarkViolet">#842DCE< /color >
    < color name="Violet">#8D38C9< /color >
    < color name="Purple">#8E35EF< /color >
    < color name="PurpleDragon">#C38EC7< /color >
    < color name="SeaShell">#FFF5EE< /color >
    < color name="MilkWhite">#FEFCFF< /color >
    < color name="White">#FFFFFF< /color >
< /resources >

Пример кода приложения, который получает цвет:

Resources res = getResources();
int color = res.getColor(R.color.Purple);

Пример layout XML, который применяет цвет к атрибуту:

< TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/SeaShell"
    android:text="Hello"/ >

Еще пример кода, который из ресурса цвета получает текст  атрибута HTML, кодирующего цвет:

int ColorFontHead = 0xFFFFFF & context.getResources().getColor(R.color.White);
int ColorBackHead = 0xFFFFFF & context.getResources().getColor(R.color.Gold);
int ColorBackRows = 0xFFFFFF & context.getResources().getColor(R.color.CornYellow);
String strColorFontHead = String.format("#%06X", ColorFontHead);
String strColorBackHead = String.format("#%06X", ColorBackHead);
String strColorBackRows = String.format("#%06X", ColorBackRows);

В последнем примере кода применено наложение маски 0xFFFFFF для того, чтобы удалить значение альфа-канала из цвета, поскольку он не используется в коде HTML. Оператор String.format преобразует цвет из числового формата RRGGBB в текстовый, в виде #RRGGBB.

[Ресурс Color State List]

Это так называемый цветовой список состояний. ColorStateList является объектом, заданным в XML, который Вы можете применить как цвет, но он в реальности будет менять цвета в зависимости от состояния объекта View, к которому применен. Например, виджет кнопки Button может существовать в одном из некоторых различных состояний (кнопка нажата, получила фокус или ни то, ни другое), так что Вы можете, используя цветовой список состояний (color state list), предоставить разный цвет для каждого состояния кнопки.

Вы можете описать список состояний в файле XML. Каждый цвет задается как элемент < item > внутри одного элемента < selector >. Каждый < item > использует разные атрибуты для описания состояния, которое должно быть использовано.

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

Примечание: если Вы хотите предоставить статический ресурс цвета (static color resource), то используйте простое значение типа Color.

Файл XML размещается в res/color/filename.xml (filename используется как идентификатор имени ресурса, resource ID). Компилируемый тип данных ресурса: указатель ресурса на ColorStateList. К ресурсу из Java обращаются через R.color.filename, в XML через @[package:]color/filename

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< selector xmlns:android="http://schemas.android.com/apk/res/android" >
    < item
        android:color="hex_color"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
< /selector >

Описание элементов

< selector > обязательный элемент, который должен быть корневым. Содержит один или несколько элементов < item >. Атрибуты:

xmlns:android строка, обязательный элемент. Задает пространство имен (XML namespace), которое должно быть "http://schemas.android.com/apk/res/android";.

< item > определяет цвет для использования в определенных состояниях, как описано в атрибутах. Этот элемент должен быть дочерним для элемента < selector >. Атрибуты:

android:color цвет в шестнадцатеричном формате, обязательный атрибут. Цвет задается как величина RGB, с необязательным указанием alpha-канала. Значение всегда начинается с символа #, за которым следует информация Alpha-Red-Green-Blue в одном из следующих форматов:

• #RGB
• #ARGB
• #RRGGBB
• #AARRGGBB

android:state_pressed Boolean. Укажите "true", если этот элемент должен быть применен, когда объект в состоянии "нажато" (pressed, это происходит когда есть касание/клик на кнопке); "false", если этот элемент должен использоваться в состоянии по умолчанию (не нажато, non-pressed).

android:state_focused Boolean. Укажите "true", если этот элемент должен быть применен, когда объект получил фокус (в том случае, когда кнопка подсвечивается при использовании трекбола или d-pad); "false", если этот элемент должен использоваться в состоянии по умолчанию (нет фокуса, non-focused).

android:state_selected Boolean. Укажите "true", если этот элемент должен использоваться, когда объект выбран (selected, как происходит при открытии закладки); "false", если этот элемент должен использоваться, когда объект не выбран.

android:state_checkable Boolean. Укажите "true", если этот элемент должен использоваться, когда объект доступен для клика (checkable); "false", если этот объект недоступен для клика. Это может быть полезно использовать только в том случае, если виджет объекта может переходить между состояниями кликабельно/некликабельно.

android:state_checked Boolean. Укажите "true", если этот элемент должен использоваться в состоянии установленной галочки (checked); "false" в противоположном состоянии (un-checked).

android:state_enabled Boolean. Укажите "true", если этот элемент должен использоваться в разрешенном состоянии (enabled, когда он может принимать события касания/клика, touch/click events); "false", если этот элемент должен использоваться в запрещенном состоянии.

android:state_window_focused Boolean. Укажите "true", если этот элемент должен использоваться, когда окно приложения получило фокус (приложение находится на переднем плане экрана, foreground), "false" если этот элемент должен использоваться, когда окно приложения не имеет фокуса (например, если опущено вниз меню оповещений, или если появилось окно диалога).

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

Пример, XML сохранен в файл res/color/button_text.xml:

< ?xml version="1.0" encoding="utf-8"? >
< selector xmlns:android="http://schemas.android.com/apk/res/android" >
    < item android:state_pressed="true"
          android:color="#ffff0000"/> < !-- pressed -- >
    < item android:state_focused="true"
          android:color="#ff0000ff"/> < !-- focused -- >
    < item android:color="#ff000000"/> < !-- default -- >
< /selector >

Этот layout XML применит к View вышеуказанный цветовой список:

< Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />

См. также:

Color (simple value) site:developer.android.com.
ColorStateList site:developer.android.com.
State List Drawable site:developer.android.com.

[Ресурсы типа Drawable]

Рисуемые (drawable) ресурсы составляют главную концепцию для графики, которая может быть отрисована на экране, и которую можно запросить через такое API как getDrawable(int), или применить к другому XML-ресурсу с помощью атрибутов наподобие android:drawable и android:icon. Есть несколько разных типов drawable-ресурсов.

Bitmap File - растровая картинка, графический файл с расширением .png, .jpg или .gif. Создается с помощью класса BitmapDrawable.

Bitmap-файлом (растровой картинкой) считаются файлы с расширением .png, .jpg или .gif. Android создает Drawable-ресурс для любого такого файла который Вы разместите в папке res/drawable/, при этом имена файлов без расширения образуют идентификатор ресурса (resource ID).

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

Для обращения к ресурсу может использоваться компилируемый класс BitmapDrawable. На языке Java доступ к ресурсу осуществляется с помощью R.drawable.filename, в XML обращение к ресурсу происходит через @[package:]drawable/filename.

Например, картинка сохранена в файл res/drawable/myimage.png, и этот layout XML применит картинку к View:

< ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/myimage" />

Следующий код получит картинку как объект Drawable:

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);

См. также:

2D Graphics site:developer.android.com.
BitmapDrawable site:developer.android.com.

[XML Bitmap]

XML bitmap является ресурсом, заданным в XML, который указывает на файл bitmap. В результате появляется алиас (псевдоним) для сырого файла растровой картинки (raw bitmap file). XML может указать дополнительные свойства для картинки, такие как создание иллюзии увеличения глубины цвета (dithering) и мозаика (tiling).

Примечание: Вы можете использовать элемент < bitmap > как дочерний в элементе < item >. Например, когда создается список состояний (state list) или список слоев (layer list), Вы можете исключить атрибут android:drawable из элемента < item > и встроить внутрь него < bitmap >, который определит рисуемый объект.

XML bitmap размещается в файле res/drawable/filename.xml, при этом имя файла без расширения дает идентификатор ресурса (resource ID). Компилируемый тип данных для ресурса BitmapDrawable. К ресурсу происходит обращение на Java через R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" | 
            "fill_vertical" | "center_horizontal" | "fill_horizontal" |
            "center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:mipMap=["true" | "false"] android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />

Описание элементов

< bitmap > задает источник для картинки и её свойства. Атрибуты:

xmlns:android строка. Задает пространство имен XML, которое должно быть "http://schemas.android.com/apk/res/android";. Это требуется только если < bitmap > является корневым элементом, и не требуется, когда < bitmap > встроен внутри < item >.

android:src рисуемый ресурс, обязательный элемент. Дает ссылку на drawable resource.

android:antialias Boolean. Разрешает или запрещает антиалиазинг.

android:dither Boolean. Разрешает или запрещает dithering картинки, если картинка не имеет ту же конфигурацию пикселей, что и экран (например ARGB 8888 bitmap, которая должна быть отображена на экране RGB 565).

android:filter Boolean. Разрешает или запрещает фильтрацию картинки. Фильтрация используется, когда картинка сжимается или расширяется, чтобы улучшить её внешний вид.

android:gravity ключевое слово. Задает гравитацию для картинки. Гравитация показывает, где расположить картинку в её контейнере, если картинка меньше, чем контейнер. Здесь может быть указано одно или большее количество (разделенных операцией ИЛИ '|') следующих констант:

ЗначениеОписание
top Помещает объект в верхнюю часть контейнера, без изменения его размера.
bottom То же самое, но по нижнему срезу контейнера.
left То же самое, но по левому срезу.
right То же самое, но по правому срезу.
center_vertical Размещает объект по вертикальному центру контейнера, без изменения его размеров.
fill_vertical Увеличивает вертикальный размер объекта, если это нужно для полного заполнения контейнера.
center_horizontal Размещает объект по горизонтальному центру контейнера, без изменения его размеров.
fill_horizontal Увеличивает горизонтальный размер объекта, если это нужно для полного заполнения контейнера.
center Размещает объект в центре контейнера и по вертикали и по горизонтали, без изменения его размера.
fill Увеличивает объект по горизонтали и вертикали, если это нужно для полного заполнения контейнера. Это поведение по умолчанию.
clip_vertical Дополнительная опция, которая может быть установлена, чтобы верхняя и/или нижняя части дочернего объекта были обрезаны границами контейнера. Обрезка базируется на вертикальной gravity: top gravity обрезает объект снизу, bottom gravity обрезает сверху, и если гравитации по вертикали нет, то обрезаются оба края, и верхний и нижний.
clip_horizontal Дополнительная опция, которая может быть установлена, чтобы левая и/или правая части дочернего объекта были обрезаны границами контейнера. Обрезка базируется на горизонтальной gravity: left gravity обрезает объект справа, right gravity обрезает слева, и если гравитации по горизонтали нет, то обрезаются оба края, и верхний и нижний.

android:mipMap Boolean. Разрешает или запрещает mipmap hint. Для дополнительной информации см. setHasMipMap(). Значение по умолчанию false.

android:tileMode ключевое слово. Задает режим мозаики. Когда режим мозаики разрешен, то картинка будет повторена до заполнения контейнера, при этом атрибут gravity будет игнорирован. Здесь должна быть указана одна из следующих констант:

ЗначениеОписание
disabled Картинка не размножается мозаикой. Это значение по умолчанию.
clamp Реплицирует цвет границы, если шейдер рисует за пределами оригинальных границ.
repeat Повторяет картинку шейдера по горизонтали и вертикали.
mirror Повторяет картинку шейдера по горизонтали и вертикали, чередуя зеркалирование изображений, так чтобы соседние картинки всегда сшивались.

Пример:

< ?xml version="1.0" encoding="utf-8"? >
< bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />

См. также:

BitmapDrawable site:developer.android.com.
Creating alias resources site:developer.android.com.

 

Nine-Patch File - это файл PNG с растягиваемыми регионами, чтобы можно было изменить размеры изображения, базируясь на его содержимом (.9.png). Создается с помощью класса NinePatchDrawable.

NinePatch это картинка PNG, в которой Вы можете задать растягиваемые регионы, которые Android масштабирует, когда содержание в View превышает нормальные границы изображения. Вы обычно назначаете этот тип картинки как заполнение заднего плана (background) для View, в котором хотя бы одно измерение установлено в состояние "wrap_content", и когда View увеличивается, чтобы разместить свое содержимое, картинка Nine-Patch также изменяет размер для того, чтобы соответствовать размеру View. Пример использования Nine-Patch - заполнение заднего плана (background), используемое для стандартного Android-виджета Button, так как Button должен менять свой размер, чтобы разместить текст внутри кнопки.

Точно так же, как и с обычным bitmap, Вы можете ссылаться на файл Nine-Patch напрямую или из ресурса, заданного через XML.

Подробное обсуждение вопросов создания файла Nine-Patch с растягиваемыми регионами см. в документе 2D Graphics.

[Файл Nine-Patch]

Размещение файла res/drawable/filename.9.png, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных NinePatchDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Пример: картинка сохранена в файл res/drawable/myninepatch.9.png. Этот layout XML применяет Nine-Patch к View:

< Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />

См. также:

2D Graphics site:developer.android.com.
NinePatchDrawable site:developer.android.com.
XML Nine-Patch site:developer.android.com.

[XML Nine-Patch]

XML Nine-Patch является ресурсом, заданным в XML, который указывает на файл Nine-Patch. Такой XML может задавать dithering для картинки.

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных NinePatchDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />

Описание элементов

< nine-patch > это единственный элемент, который определяет источник для Nine-Patch и его свойства. Атрибуты:

xmlns:android строка, обязательный элемент. Задает пространство имен XML, и здесь должно быть "http://schemas.android.com/apk/res/android";.

android:src определяет Drawable resource, обязательный элемент. Дает ссылку на файл Nine-Patch.

android:dither Boolean. Разрешает или запрещает dithering картинки, если картинка не имеет ту же конфигурацию пикселей, что и экран (например ARGB 8888 bitmap, которая должна быть отображена на экране RGB 565).

Пример:

< ?xml version="1.0" encoding="utf-8"? >
< nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

Layer List - список слоев, специальный drawable-ресурс, который управляет массивом из других drawable-ресурсов. Этот список отрисовывается в порядке следования элементов в массиве, так что элемент с самым большим индексом будет нарисован на самом верху. Создается с помощью класса LayerDrawable.

LayerDrawable является рисуемым объектом, который управляет массивом других рисуемых объектов. Каждый рисуемый объект в списке рисуется в том порядке, в каком он идет по списку, так что последний drawable окажется нарисованным сверху. Каждый drawable представлен в списке элементом < item >, который находится внутри элемента < layer-list >.

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных LayerDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    < item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
< /layer-list >

Описание элементов

< item > этот элемент задает слой, для размещения его среди других в позиции, заданном его атрибутами. Должен быть дочерним в элементе < layer-list >. Принимает дочерние элементы < bitmap >. Атрибуты:

android:drawable обязательный элемент, указывает на drawable resource.

android:id Resource ID. Уникальный resource ID для этого drawable. Чтобы создать новый resource ID для этого элемента, используйте форму "@+id/name". Символ плюса показывает, что здесь должен быть создан новый ID. Вы можете использовать этот идентификатор для получения и модификации drawable с помощью функций View.findViewById() или Activity.findViewById().

android:top целое число. Смещение верхнего края в пикселах.

android:right целое число. Смещение правого края в пикселах.

android:bottom целое число. Смещение нижнего края в пикселах.

android:left целое число. Смещение левого края в пикселах.

Все рисуемые элементы (drawable items) масштабируются, чтобы размеру содержания View, это поведение по умолчанию. Таким образом, размещение Ваших картинок в списке слоев на разных позициях может увеличить размер View и некоторые картинки могут быть смасштабированы, как это необходимо. Чтобы избежать масштабирования элементов в списке, используйте элемент < bitmap > внутри элемента < item > для указания drawable и задайте атрибут gravity в некоторое значение, которое не приводит к масштабированию, такой как "center". Например, следующий < item > задает элемент, который масштабируется, чтобы соответствовать своему контейнеру View:

< item android:drawable="@drawable/image" />

Чтобы избежать масштабирования, следующий пример использует элемент < bitmap > с центрирующей гравитацией:

< item >
  < bitmap android:src="@drawable/image"
          android:gravity="center" />
< /item >

Пример: XML сохранен в файл res/drawable/layers.xml.

< ?xml version="1.0" encoding="utf-8"? >
< layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    < item >
      < bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    < /item >
    < item android:top="10dp" android:left="10dp" >
      < bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    < /item>
    < item a ndroid:top="20dp" android:left="20dp" >
      < bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    < /item >
< /layer-list >

Обратите внимание, что этот пример использует встроенный элемент < bitmap >, чтобы определить drawable resource для каждого элемента в списке с применением "center" gravity. Это обеспечит отсутствие масштабирования каждого элемента по размеру контейнера по причине изменения размеров из-за разных смещений картинок на слоях.

Этот layout XML применяет drawable к View:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

В результате отобразится стек из картинок с увеличивающимся смещением:

Android-resource-Layer-List-result

См. также:

LayerDrawable site:developer.android.com.

State List - список состояний, файл XML, который содержит ссылки на различные растровые (bitmap) графические изображения для разных состояний (например, может использоваться для анимации кнопки, когда она нажата [4]). Создается с помощью класса StateListDrawable.

StateListDrawable является рисуемым объектом, который задан в XML. Он использует несколько разных изображений для представления одного и того же графического изображения, в зависимости от состояния объекта. Например, виджет кнопки Button может существовать в одном из нескольких разных состояний (нажат, получил фокус, или ни одно из этого), и с использованием state list drawable Вы можете предоставить разные фоновые картинки (background) для каждого состояния кнопки.

Вы можете описать state list в файле XML. Каждый графический элемент представлен элементом < item >, находящимся внутри элемента < selector >. Каждый < item > использует разные атрибуты для описания состояния, в котором должна использоваться графика для объекта drawable.

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

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных StateListDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["truefalse"]
    android:dither=["truefalse"]
    android:variablePadding=["truefalse"] >
    < item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["truefalse"]
        android:state_focused=["truefalse"]
        android:state_hovered=["truefalse"]
        android:state_selected=["truefalse"]
        android:state_checkable=["truefalse"]
        android:state_checked=["truefalse"]
        android:state_enabled=["truefalse"]
        android:state_activated=["truefalse"]
        android:state_window_focused=["truefalse"] />
< /selector >

Описание элементов

< selector > обязательный элемент, который должен быть корневым. Содержит один или большее количество элементов < item >. Атрибуты:

xmlns:android строка, обязательный элемент. Определяет пространство имен XML, должно быть установлено в "http://schemas.android.com/apk/res/android";.

android:constantSize Boolean. Используйте "true", если внутренний сообщаемый размер drawable остается постоянным при всех изменениях состояния (размер максимальный из всех состояний); укажите "false", если размер меняется в зависимости от текущего состояния. По умолчанию false.

android:dither Boolean. Разрешает или запрещает dithering картинки, если картинка не имеет ту же конфигурацию пикселей, что и экран (например ARGB 8888 bitmap, которая должна быть отображена на экране RGB 565). Значение "false" запрещает dithering, по умолчанию true.

android:variablePadding Boolean. Укажите "true", если drawable padding (отступ) должен изменяться на основе текущего выбранного состояния; "false", если padding должен оставаться неизменным (на базе максимума padding от всех состояний). Разрешение этой опции требует, чтобы Вы обрабатывали ситуации с изменениями layout, когда меняется состояние объекта, и часто это не поддерживается. По умолчанию false.

< item > этот элемент задает drawable для использования в определенном состоянии, как это описано атрибутами элемента. Элемент < item > должен быть дочерним для элемента < selector >. Атрибуты:

android:drawable рисуемый ресурс, обязательный элемент. Дает ссылку на Drawable resource.

android:state_pressed Boolean. Укажите "true", если этот item должен использоваться, когда объект в состоянии "нажато" (это происходит при касании/клике на кнопке); "false", если этот item должен использоваться в состоянии по умолчанию (состояние non-pressed, не нажато).

android:state_focused Boolean. Укажите "true", если этот item должен использоваться, когда объект получил фокус ввода (как например если пользователь выбрал текстовое поле ввода); "false", если этот item должен использоваться в состоянии по умолчанию (non-focused, отсутствие фокуса).

android:state_hovered Boolean. Укажите "true", если этот item должен использоваться, когда объект перекрывается (hovered) курсором; "false", если этот item должен использоваться в состоянии по умолчанию (non-hovered). Часто этот drawable может быть тем же самым, что и drawable, используемый для состояния "focused". Атрибут android:state_hovered появился в API level 14.

android:state_selected Boolean. Укажите "true", если этот item должен использоваться, когда объект в настоящее время выбран пользователем при навигации указателями направления (примером может быть навигация по списку с использованием d-pad); "false", если этот item должен использоваться для невыбранного объекта.

Состояние "выбрано" (selected) используется, когда фокус (android:state_focused) не имеет значения (как если бы список list view имеет фокус, и элемент в этом списке выбран с помощью d-pad).

android:state_checkable Boolean. Укажите "true", если этот элемент должен использоваться, когда объект доступен для установки галочки (checkable); "false", если этот элемент должен использоваться, когда на объект нельзя поставить галочку (not checkable). Этот атрибут полезен только если объект может менять состояние checkable/non-checkable.

android:state_checked Boolean. Укажите "true", если этот элемент должен использоваться, когда на объект установлена галочка (checked); "false", если он должен использоваться для объекта, когда он без галочки (un-checked).

android:state_enabled Boolean. Укажите "true", если этот элемент используется, когда объект разрешен, enabled (может принимать события касания/клика); "false", если он должен использоваться, когда объект запрещен.

android:state_activated Boolean. Укажите "true", если этот элемент должен использоваться, когда объект активизирован как постоянный выбор (persistent selection, такой, чтобы подсветить ранее выбранный элемент списка в персистентном навигационном представлении); "false", если он должен использоваться, когда объект не активирован. Атрибут появился в API level 11.

android:state_window_focused Boolean. Укажите "true", если этот элемент должен использоваться, когда окно приложения получило фокус (приложение находится на переднем плане экрана, foreground), "false" если этот элемент должен использоваться, когда окно приложения не имеет фокуса (например, если опустилось оповещение, или появилось окно диалога).

Примечание: помните, что Android применяет первый элемент в state list, который подходит для текущего состояния объекта. Таким образом, если первый элемент в списке не содержит ни одного из вышеперечисленных атрибутов, то он всегда будет применен. По этой причине Ваше значение по умолчанию всегда должно быть последним в списке (как будет продемонстрировано в следующем примере).

Пример: XML сохранен в файл res/drawable/button.xml

< ?xml version="1.0" encoding="utf-8"? >
< selector xmlns:android="http://schemas.android.com/apk/res/android" >
    < item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> < !-- pressed -- >
    < item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> < !-- focused -- >
    < item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> < !-- hovered -- >
    < item android:drawable="@drawable/button_normal" /> < !-- default -- >
< /selector >

Этот layout XML применяет список состояний drawable к кнопке Button:

< Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />

См. также:

StateListDrawable site:developer.android.com.

Level List - список уровней, файл XML, определяющий drawable-ресурс, который управляет некоторым количеством альтернативных Drawables, каждому из которых присвоено максимальное числовое значение. Создается с помощью класса LevelListDrawable.

Это ресурс drawable, который поддерживает некоторое количество альтернативных рисуемых объектов, каждый из которых имеет назначенное числовое значение. Установка значения уровня drawable с setLevel() загружает рисуемый ресурс в level list, у которого есть значение android:maxLevel, больше или равное значению, переданное методу.

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных LevelListDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    < item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
< /level-list >

Описание элементов

< level-list > этот элемент должен быть корневым. Содержит один или большее количество элементов < item >. Атрибуты:

xmlns:android строка, обязательный элемент. Определяет пространство имен XML, которое должно быть "http://schemas.android.com/apk/res/android";.

< item > задает drawable для использования в качестве основного уровня. Атрибуты:

android:drawable ресурс Drawable, обязательный ресурс. Ссылка на ресурс drawable, который будет вставлен в список.

android:maxLevel целое число. Максимальный уровень, разрешенный для этого элемента.

android:minLevel целое число. Минимальный уровень, разрешенный для этого элемента.

Пример:

< ?xml version="1.0" encoding="utf-8"? >
< level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    < item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    < item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
< /level-list >

Как только этот список применен к View, уровень может быть изменен функциями setLevel() или setImageLevel().

См. также:

LevelListDrawable site:developer.android.com.

Transition Drawable - файл XML, описывающий drawable, который может перетекать (cross-fade) между двумя drawable-ресурсами. Создается с помощью класса TransitionDrawable.

Ресурсом TransitionDrawable является рисуемый объект, который может плавно переходить (cross-fade) между двумя рисуемыми ресурсами (drawable). Каждый drawable представлен как элемент < item > внутри элемента < transition >. Поддерживается не более 2 элементов. Для перехода вперед делается вызов startTransition(). Для перехода обратно делается вызов reverseTransition().

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных TransitionDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    < item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
< /transition >

Описание элементов

< transition > обязательный элемент, должен быть корневым. Содержит 1 или 2 элемента < item >. Атрибуты:

xmlns:android строка, обязательный элемент. Определяет пространство имен XML которое должно быть "http://schemas.android.com/apk/res/android";.

< item > задает рисуемый ресурс (drawable) для использования как части рисуемого перехода. Элемент item должен быть дочерним для элемента < transition >. Принимает дочерние элементы < bitmap >.
attributes:

android:drawable рисуемый ресурс, обязательный элемент. Дает ссылку на drawable resource.

android:id идентификатор ресурса (Resource ID). Уникальный ID для этого drawable. Чтобы создать новый resource ID для этого элемента, используйте форму: "@+id/name". Символ + показывает, что здесь должен быть создан новый ID. Вы можете использовать этот идентификатор для получения и модификации drawable-ресурса функциями View.findViewById() или Activity.findViewById().

android:top целое число. Смещение от верхнего края в пикселах.

android:right целое число. Смещение от правого края в пикселах.

android:bottom целое число. Смещение от нижнего края в пикселах.

android:left целое число. Смещение от нижнего края в пикселах.

Пример: XML сохранен в файл res/drawable/transition.xml.

< ?xml version="1.0" encoding="utf-8"? >
< transition xmlns:android="http://schemas.android.com/apk/res/android" >
    < item android:drawable="@drawable/on" />
    < item android:drawable="@drawable/off" />
< /transition >

Этот layout XML применяет drawable к View:

< ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

Добавьте следующий код для выполнения 500 мс перехода от первого элемента ко второму:

ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);

См. также:

TransitionDrawable site:developer.android.com.

Inset Drawable - файл XML, определяющий drawable, который будет вставлен в другой drawable с указанным расстоянием. Это полезно, когда для View (вид, представление) нужен рисунок заднего плана (background drawble), который меньше, чем реальные границы View.

Это рисуемый ресурс, определяемый в XML, который вставляет (inset) другой рисуемый ресурс на указанной дистанции. Это полезно, когда для View нужен задний фон (background), который меньше, чем реальные границы View.

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных InsetDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" />

Описание элементов

< inset > задает вставляемый рисуемый ресурс (inset drawable). Должен быть корневым элементом. Атрибуты:

xmlns:android строка, обязательный элемент. Определяет пространство имен XML которое должно быть "http://schemas.android.com/apk/res/android";.

android:drawable рисуемый ресурс, обязательный атрибут. Дает ссылку на вставляемый ресурс.

android:insetTop размер. Вставка сверху, в качестве указания значения размера или указания ресурса размера.

android:insetRight размер. Вставка справа, в качестве указания значения размера или указания ресурса размера.

android:insetBottom размер. Вставка снизу, в качестве указания значения размера или указания ресурса размера.

android:insetLeft размер. Вставка слева, в качестве указания значения размера или указания ресурса размера.

Пример:

< ?xml version="1.0" encoding="utf-8"? >
< inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />

См. также:

InsetDrawable site:developer.android.com.

Clip Drawable - файл XML, определяющий drawable, который отсекает другой drawable на основе значения текущего уровня. Создается с помощью класса ClipDrawable.

Рисуемый ресурс, заданный в XML, который отсекает другой рисуемый ресурс, базируясь на текущем уровне. Вы можете управлять тем, насколько дочерний рисуемый ресурс будет обрезан, через указание ширины width и высоты height на основе уровня based on the level, а также через управление гравитацией (gravity), чтобы задать, где результат будет размещен в полном контейнере. Этот ресурс часто используется для реализации элементов наподобие линейки прогресса (progress bar).

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных ClipDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" | 
         "fill_vertical" | "center_horizontal" | "fill_horizontal" | "center" | "fill" |
         "clip_vertical" | "clip_horizontal"]
/>

Описание элементов

< clip > задает обрезающий рисуемый объект, должен быть корневым элементом. Атрибуты:

xmlns:android строка, обязательный элемент. Определяет пространство имен XML которое должно быть "http://schemas.android.com/apk/res/android";.

android:drawable рисуемый ресурс, обязательный элемент. Дает ссылку на drawable resource, который будет обрезан.

android:clipOrientation ключевое слово. Задает ориентирование для обрезки. Здесь должна быть указана одна из следующих констант:

ЗначениеОписание
horizontal Рисуемый ресурс будет обрезан по горизонтали.
vertical Рисуемый ресурс будет обрезан по вертикали.

android:gravity ключевое слово, указывает, где внутри рисуемого объекта должен быть размещен обрезанный кусок. Здесь должна быть указана одна или большее количество констант (разделенных символом '|'):

ЗначениеОписание
top Помещает объект по верхнему срезу контейнера, без изменения размера. Когда clipOrientation установлено в "vertical", обрезка получается в нижней части рисуемой картинки.
bottom Помещает объект по нижнему срезу контейнера, без изменения размера. Когда clipOrientation установлено в "vertical", обрезка получается в верхней части.
left Помещает объект по левому краю контейнера, без изменения размера. Это поведение по умолчанию. Когда clipOrientation установлено в значение "horizontal", обрезка получается справа.
right Помещает объект по правому краю контейнера, без изменения размеров. Когда clipOrientation установлено в "horizontal", обрезка получается слева.
center_vertical Помещает объект по вертикальному центру контейнера, без изменения размера. Обрезка происходит так же, как если бы gravity было установлена "center".
fill_vertical Увеличивает вертикальный размер объекта, если это необходимо для полного заполнения контейнера. Когда clipOrientation задано в "vertical", никакой обрезки не будет, потому что рисуемый объект заполнит пространство по вертикали (за исключением случая, когда drawable level установлен в 0, тогда объект не будет виден).
center_horizontal Помещает объект по горизонтальному центру контейнера, без изменения размера. Обрезка происходит точно так же, как в случае установки gravity в значение "center".
fill_horizontal Увеличивает горизонтальный размер объекта, если это нужно для заполнения контейнера. Когда clipOrientation установлена "horizontal", никакой обрезки не происходит, потому что рисуемый объект заполнит пространство по горизонтали (за исключением случая, когда drawable level установлен в 0, тогда объект не будет виден).
center Помещает объект по центру контейнера и по вертикали, и по горизонтали, без изменения размера. Когда clipOrientation установлена в "horizontal", обрезка произойдет слева и справа. Когда clipOrientation установлена в "vertical", обрезка будет сверху и снизу.
fill Увеличивает горизонтальный и вертикальный размеры объекта, если это нужно для полного заполнения контейнера. Обрезки не будет, потому что рисунок заполнит пространство по горизонтали и вертикали (за исключением случая, когда drawable level установлен в 0, тогда объект не будет виден).
clip_vertical Дополнительная опция, которая может быть установлена, чтобы дочерний рисуемый объект был обрезан сверху и/или снизу границами контейнера. Обрезка будет основана на вертикальной gravity: top gravity обрежет нижнюю часть, а bottom gravity обрежет верхнюю часть. Если ни то, ни другое, то будут обрезан и низ, и верх.
clip_horizontal Дополнительная опция, которая может быть установлена, чтобы дочерний рисуемый объект был обрезан слева и/или справа границами контейнера. Обрезка будет основана на horizontal gravity: left gravity обрежет правый край, right gravity обрежет левый. Если ни то, ни другое, то будут обрезаны и левый, и правый края.

Пример: XML сохранен в файл res/drawable/clip.xml.

< ?xml version="1.0" encoding="utf-8"? >
< clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />

Следующий layout XML применит clip drawable к View:

< ImageView
    android:id="@+id/image"
    android:background="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

Следующий код получит рисуемый ресурс и увеличит величину обрезки drawable, чтобы прогрессивно показать изображение:

ImageView imageview = (ImageView) findViewById(R.id.image);
ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();
drawable.setLevel(drawable.getLevel() + 1000);

Увеличение уровня уменьшает количество обрезки, и медленно открывает изображение. На картинке показано состояние на уровне 7000:

Android-resource-Clip-result

Примечание: уровень по умолчанию 0, что соответствует полностью обрезанному изображению, так что картинка становится невидимой. Когда уровень 10000, изображение не обрезано и полностью видимо.

См. также:

ClipDrawable site:developer.android.com.

Scale Drawable - файл XML, задающий drawable, который меняет размер другого Drawable на основе значения его текущего уровня. Создается с помощью класса ScaleDrawable.

Этот рисуемый ресурс задается в XML, и изменяет размер другого рисуемого ресурса, основываясь на установленном текущем уровне.

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных ScaleDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
         "fill_vertical" | "center_horizontal" | "fill_horizontal" |
         "center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:scaleHeight="percentage" android:scaleWidth="percentage" />

Описание элементов

< scale > задает рисуемый ресурс для масштабирования, должен быть корневым элементом. Атрибуты:

xmlns:android строка, обязательный элемент. Определяет пространство имен XML которое должно быть "http://schemas.android.com/apk/res/android";.

android:drawable рисуемый ресурс, обязательный элемент. Дает ссылку на drawable resource, который будет масштабирован.

android:scaleGravity ключевое слово. Задает позицию гравитации после масштабирования. Здесь должна быть указана одна или большее количество констант (разделенных символом '|'):

ValueОписание
top Помещает объект по верхнему срезу контейнера без изменения размеров.
bottom Помещает объект по нижнему срезу контейнера без изменения размеров.
left Помещает объект по левому срезу контейнера без изменения размеров. Это поведение по умолчанию.
right Помещает объект по правому срезу контейнера без изменения размеров.
center_vertical Помещает объект по вертикальному центру контейнера без изменения размеров.
fill_vertical

Увеличивает вертикальный размер объекта, если это нужно для полного заполнения контейнера.

center_horizontal Помещает объект по горизонтальному центру контейнера без изменения размеров.
fill_horizontal Увеличивает и горизонтальный, и вертикальный размеры объекта, если это нужно для полного заполнения контейнера.
center Помещает объект по центру контейнера, по горизонтали и вертикали, без изменения размеров.
fill Увеличивает вертикальный размер объекта, если это нужно для полного заполнения контейнера.
clip_vertical Дополнительная опция, которая может быть установлена, чтобы дочерний рисуемый объект был обрезан сверху и/или снизу границами контейнера. Обрезка будет основана на вертикальной gravity: top gravity обрежет нижнюю часть, а bottom gravity обрежет верхнюю часть. Если ни то, ни другое, то будут обрезан и низ, и верх.
clip_horizontal Дополнительная опция, которая может быть установлена, чтобы дочерний рисуемый объект был обрезан слева и/или справа границами контейнера. Обрезка будет основана на horizontal gravity: left gravity обрежет правый край, right gravity обрежет левый. Если ни то, ни другое, то будут обрезаны и левый, и правый края.

android:scaleHeight значение процентов для масштабирования по высоте, вычисленное в процентах от границ drawable. Формат XX%, например 100%, 12.5%, и т. д.

android:scaleWidth то же самое, но для ширины.

Пример:

< scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />

См. также:

ScaleDrawable site:developer.android.com.

Shape Drawable - файл XML, определяющий геометрическую фигуру, включая цвета и градиенты. Создается с помощью класса ShapeDrawable.

Это рисуемый ресурс для определения в XML обычной фигуры.

Размещение файла res/drawable/filename.xml, имя файла используется, как обычно, в качестве идентификатора ресурса (resource ID). Компилируемый тип данных GradientDrawable, на Java к ресурсу обращаются по имени R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

< ?xml version="1.0" encoding="utf-8"? >
< shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    < corners
        android:radius="integer"
        android:topLeftRadius="integer"
        android:topRightRadius="integer"
        android:bottomLeftRadius="integer"
        android:bottomRightRadius="integer" />
    < gradient
        android:angle="integer"
        android:centerX="integer"
        android:centerY="integer"
        android:centerColor="integer"
        android:endColor="color"
        android:gradientRadius="integer"
        android:startColor="color"
        android:type=["linear" | "radial" | "sweep"]
        android:useLevel=["true" | "false"] />
    < padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    < size
        android:width="integer"
        android:height="integer" />
    < solid
        android:color="color" />
    < stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
< /shape >

Описание элементов

< shape > рисуемая фигура, должен быть корневым элементом. Атрибуты:
attributes:

xmlns:android строка, обязательный элемент. Определяет пространство имен XML которое должно быть "http://schemas.android.com/apk/res/android";.

android:shape ключевое слово, задает тип фигуры. Допустимы следующие значения:

ЗначениеОписание
"rectangle" Прямоугольник, который заполняет содержащий его View. Это поведение для фигуры по умолчанию.
"oval" Овальная фигура, которая по размерам умещается в содержащем его View.
"line" Горизонтальная линия, которая пересекает при ширине содержащий её View. Эта фигура требует элемент < stroke >, чтобы определить ширину линии.
"ring" Фигура в виде кольца.

Следующие атрибуты используются, только когда android:shape="ring" (кольцо):

android:innerRadius размер, радиус внутренней части кольца (радиус внутренней дырки), указывается как значение размера или ресурс размера.

android:innerRadiusRatio Float, радиус внутренней части кольца, вычисленный как отношение ширины кольца. Например, если android:innerRadiusRatio="5", то внутренний радиус равен ширине кольца, поделенной на 5. Это значение отменяется атрибутом android:innerRadius. Значение по умолчанию 9.

android:thickness размер, указывает толщину кольца в виде величины размера или ресурса размера.

android:thicknessRatio Float, задает толщину кольца как отношение к его ширине. Например, если android:thicknessRatio="2", то толщина равна ширине кольца поделенной на 2. Это значение отменяется атрибутом android:innerRadius. Значение по умолчанию 3.

android:useLevel Boolean. Укажите "true", если это используется в качестве LevelListDrawable. Обычно должно быть "false", или Ваша фигура может не отобразиться.

< corners > создает скругленные углы у фигуры. Элемент работает только тогда, когда фигура - прямоугольник.
Атрибуты:

android:radius размер, задает радиус скругления для всех углов в виде величины размера или ресурса размера. Этот атрибут будет отменен для каждого угла следующими атрибутами.

android:topLeftRadius размер, задает радиус скругления верхнего левого угла, указывается как значение размера или как ресурс размера.

android:topRightRadius то же самое, но для верхнего правого угла.

android:bottomLeftRadius то же самое, но для нижнего левого угла.

android:bottomRightRadius то же самое, но для нижнего правого угла.

Примечание: каждый угол должен (изначально) быть предоставленным с радиусом угла большим, чем 1, иначе углы не будут скруглены. Если вы хотите, чтобы отдельные углы не были скруглены, метод обхода состоит в использовании android:radius для установки радиуса скругления по умолчанию больше чем 1, но затем переопределением каждого угла значениями, которые Вам нужны, и укажите нуль ("0dp") для тех углов, которым не нужно скругление.

< gradient > задает градиент цвета для фигуры. Атрибуты:

android:angle целое число, угол градиента в градусах. 0 слева направо, 90 снизу вверх. Должно быть указано кратным 45. Значение по умолчанию 0.

android:centerX Float. Относительная позиция X для центра градиента (можно указать в диапазоне от 0 до 1.0).

android:centerY то же самое, но для Y.

android:centerColor опциональный цвет, который меняется от начального к конечному. Указывается как шестнадцатеричное число или ресурс цвета.

android:endColor указывает конечный цвет, как шестнадцатеричное число или ресурс цвета.

android:gradientRadius Float, радиус для градиента. Применяется только когда android:type="radial".

android:startColor указывает начальный цвет, как шестнадцатеричное число или ресурс цвета.

android:type ключевое слово, задает характер прикладываемого градиента. Допустимы значения:

ЗначениеОписание
"linear" Линейный градиент. Это поведение по умолчанию.
"radial" Радиальный градиент. Начальный цвет указывается через center color.
"sweep" Градиент широкими линиями (sweeping line gradient).

android:useLevel Boolean. Укажите "true", если это используется как LevelListDrawable.

< padding > этот элемент задает отступ, прикладываемого от контейнерного элемента View (задает позицию отступа содержимого View, не фигуры). Атрибуты:

android:left размер, указывает левый отступ в виде размера или ресурса размера.

android:top то же самое, но для верхнего отступа.

android:right то же самое, но для отступа справа.

android:bottom то же самое, но для отступа снизу.

< size > этот элемент задает размер фигуры. Атрибуты:

android:height размер, высота фигуры в виде значения размера или ресурса размера.

android:width то же самое, но для ширины.

Примечание: по умолчанию фигура масштабируется до размера контейнера View пропорционально указанным здесь размерам. Когда Вы используете фигуру в ImageView, Вы можете ограничить масштабирование путем установки android:scaleType в значение "center".

< solid > сплошной цвет для заполнения фигуры. Атрибуты:

android:color цвет, который будет применен к фигуре, указанный в виде шестнадцатеричного числа или ресурса цвета.

< stroke > задает штриховую линию для фигуры. Атрибуты:

android:width размер, задает толщину линии в виде значения размера или ресурса размера.

android:color цвет для линии в виде шестнадцатеричного значения или ресурса цвета.

android:dashGap размер, расстояние между штрихами линии, в виде значения размера или ресурса размера. Этот атрибут допустим только если установлен атрибут android:dashWidth.

android:dashWidth размер для каждого штриха линии, в виде значения размера или ресурса размера. Этот атрибут допустим только тогда, когда установлен атрибут android:dashGap.

Пример: XML сохранен в файл res/drawable/gradient_box.xml.

< ?xml version="1.0" encoding="utf-8"? >
< shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    < gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45" />
    < padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    < corners android:radius="8dp" />
< /shape >

Этот layout XML применит фигуру к View:

< TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

Этот код приложения получит рисуемую фигуру и применит её к View:

Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);
TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);

См. также:

ShapeDrawable site:developer.android.com.

См. также документ "Animation Resource", который описывает, как создавать AnimationDrawable, а также пример анимированной кнопки [4].

Примечание: ресурс цвета (color resource) также может использоваться в файле XML как drawable. Например, когда создается список рисуемых состояний (state list drawable), Вы можете сослаться на ресурс цвета для атрибута android:drawable (например android:drawable="@color/green").

[Ссылки]

1. Resource Types site:developer.android.com.
2. Предоставление ресурсов для приложения Android.
3. Получение доступа к ресурсам приложения Android.
4. AnimationDrawable: создание анимированной кнопки
5. Словарик Android

 

Добавить комментарий


Защитный код
Обновить

Top of Page