Другие типы ресурсов

На этой странице описаны следующие типы ресурсов, которые можно вынести за пределы кода:

Логическое значение
Ресурс XML, который содержит логическое значение.
Цвет
Ресурс XML, который содержит значение цвета (шестнадцатеричный код).
Параметр
XML-ресурс, содержащий значение размера (с единицей измерения).
ID
XML-ресурс, который предоставляет уникальный идентификатор для ресурсов и компонентов приложения.
Целое число
Ресурс XML, содержащий целочисленное значение.
Массив целых чисел
XML-ресурс, который предоставляет массив целых чисел.
Типизированный массив
Ресурс XML, который предоставляет TypedArray (можно использовать для массива графических объектов).

Логическое значение

Логическое значение, определенное в XML.

Примечание. Логический тип – это простой ресурс, на который ссылаются с помощью значения, указанного в атрибуте name, а не имени XML-файла. Таким образом, вы можете объединить логические ресурсы с другими простыми ресурсами в одном XML-файле под одним элементом <resources>.

местоположение файла;
res/values/filename.xml
Название файла может быть любым. В качестве идентификатора ресурса используется элемент name из <bool>.
ссылка на ресурс:
В Java: R.bool.bool_name
В XML: @[package:]bool/bool_name
Синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>
elements:
<resources>
Обязательный атрибут. Это корневой узел.

Нет атрибутов.

<bool>
Логическое значение: true или false.

Атрибуты:

name
Строка. Название логического значения. Он используется в качестве идентификатора ресурса.
пример:
XML-файл сохранен в res/values-small/bools.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="screen_small">true</bool>
    <bool name="adjust_view_bounds">true</bool>
</resources>

Следующий код приложения извлекает логическое значение:

Kotlin

val screenIsSmall: Boolean = resources.getBoolean(R.bool.screen_small)

Java

Resources res = getResources();
boolean screenIsSmall = res.getBoolean(R.bool.screen_small);

В следующем XML-коде макета логическое значение используется для атрибута:

<ImageView
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:src="@drawable/logo"
    android:adjustViewBounds="@bool/adjust_view_bounds" />

Цвет

Значение цвета, определенное в XML. Цвет задается с помощью значения RGB и альфа-канала. Ресурс цвета можно использовать везде, где принимается шестнадцатеричное значение цвета. Ресурс цвета также можно использовать, когда в XML ожидается прорисовываемый ресурс, например android:drawable="@color/green".

Значение всегда начинается с символа решетки (#), за которым следует информация о прозрачности, красном, зеленом и синем цветах в одном из следующих форматов:

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

Примечание. Цвет – это простой ресурс, на который ссылаются с помощью значения, указанного в атрибуте name, а не имени XML-файла. Таким образом, вы можете объединить ресурсы цвета с другими простыми ресурсами в одном XML-файле в одном элементе <resources>.

местоположение файла;
res/values/colors.xml
Название файла может быть любым. В качестве идентификатора ресурса используется атрибут name элемента <color>.
ссылка на ресурс:
В Java: R.color.color_name
В XML: @[package:]color/color_name
Синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>
elements:
<resources>
Обязательный атрибут. Это корневой узел.

Нет атрибутов.

<color>
Цвет, выраженный в шестнадцатеричном формате.

Атрибуты:

name
Строка. Название цвета. Он используется в качестве идентификатора ресурса.
пример:
XML-файл сохранен в res/values/colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

Следующий код приложения извлекает ресурс цвета:

Kotlin

val color: Int = resources.getColor(R.color.opaque_red)

Java

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

В следующем XML-файле макета цвет применяется к атрибуту:

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

Параметр

Значение параметра, заданное в XML. Размер указывается в виде числа, за которым следует единица измерения, например 10px, 2in или 5sp. Android поддерживает следующие единицы измерения:

dp
Пиксели, не зависящие от плотности экрана, – это абстрактная единица измерения, основанная на физической плотности экрана. Эти единицы измерения используются для экранов с разрешением 160 точек на дюйм, где 1 dp примерно равен 1 пикселю. На экранах с более высокой плотностью пикселей количество пикселей, используемых для отрисовки 1 dp, увеличивается на коэффициент, соответствующий разрешению экрана.

Аналогично, на экране с меньшей плотностью пикселей количество пикселей, используемых для 1 dp, уменьшается. Соотношение dp и пикселей меняется в зависимости от плотности экрана, но не обязательно прямо пропорционально. Использование единиц dp вместо единиц px – это решение, позволяющее правильно изменять размеры представления в макете для экранов с разной плотностью пикселей. Это позволяет обеспечить единообразие размеров элементов интерфейса на разных устройствах.

sp
Пиксели, независимые от масштаба. Похожи на dp, но также масштабируются в соответствии с размером шрифта, выбранным пользователем. Рекомендуется использовать эту единицу измерения при указании размеров шрифта, чтобы они корректировались как с учетом плотности экрана, так и с учетом предпочтений пользователя.
pt
Пункты: 1/72 дюйма в зависимости от физического размера экрана, если плотность пикселей составляет 72 DPI.
px
Пиксели – соответствуют фактическим пикселям на экране. Мы не рекомендуем использовать эту единицу измерения, поскольку фактическое представление может различаться на разных устройствах. На разных устройствах может быть разное количество пикселей на дюйм и разное общее количество пикселей на экране.
mm
Миллиметры – на основе физического размера экрана.
in
Дюймы – физический размер экрана.

Примечание. Размер – это простой ресурс, на который ссылаются с помощью значения, указанного в атрибуте name, а не имени XML-файла. Таким образом, вы можете объединить ресурсы размеров с другими простыми ресурсами в одном XML-файле под одним элементом <resources>.

местоположение файла;
res/values/filename.xml
Название файла может быть любым. В качестве идентификатора ресурса используется атрибут name элемента <dimen>.
ссылка на ресурс:
В Java: R.dimen.dimension_name
В XML: @[package:]dimen/dimension_name
Синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>
elements:
<resources>
Обязательный атрибут. Это корневой узел.

Нет атрибутов.

<dimen>
Размер, представленный числом с плавающей запятой, за которым следует единица измерения (dp, sp, pt, px, mm, in).

Атрибуты:

name
Строка. Название параметра. Он используется в качестве идентификатора ресурса.
пример:
XML-файл сохранен в res/values/dimens.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="textview_height">25dp</dimen>
    <dimen name="textview_width">150dp</dimen>
    <dimen name="ball_radius">30dp</dimen>
    <dimen name="font_size">16sp</dimen>
</resources>

Следующий код приложения извлекает параметр:

Kotlin

val fontSize: Float = resources.getDimension(R.dimen.font_size)

Java

Resources res = getResources();
float fontSize = res.getDimension(R.dimen.font_size);

В следующем XML-коде макета размеры применяются к атрибутам:

<TextView
    android:layout_height="@dimen/textview_height"
    android:layout_width="@dimen/textview_width"
    android:textSize="@dimen/font_size"/>

ID

Уникальный идентификатор ресурса, определенный в XML. На основе имени, указанного в элементе <item>, инструменты разработчика Android создают уникальное целое число в классе R.java проекта. Это число можно использовать в качестве идентификатора ресурса приложения, например View в макете пользовательского интерфейса, или уникального целого числа в коде приложения, например идентификатора диалогового окна или кода результата.

Примечание. Идентификатор – это простой ресурс, на который ссылаются с помощью значения, указанного в атрибуте name, а не имени XML-файла. Таким образом, вы можете объединить ресурсы идентификаторов с другими простыми ресурсами в одном XML-файле в одном элементе <resources>. Кроме того, ресурс ID не ссылается на фактический элемент ресурса: это уникальный идентификатор, который можно прикрепить к другим ресурсам или использовать в качестве уникального целого числа в приложении.

местоположение файла;
res/values/filename.xml
Название файла может быть любым.
ссылка на ресурс:
В Java: R.id.name
В XML: @[package:]id/name
Синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>
elements:
<resources>
Обязательный атрибут. Это корневой узел.

Нет атрибутов.

<item>
Определяет уникальный идентификатор. Не принимает значения, только атрибуты.

Атрибуты:

type
Необходимое значение: "id".
name
Строка. Уникальное название идентификатора.
пример:

XML-файл сохранен в res/values/ids.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="button_ok" />
    <item type="id" name="dialog_exit" />
</resources>

В следующем фрагменте макета используется идентификатор "button_ok" для виджета Button:

<Button android:id="@id/button_ok"
    style="@style/button_style" />

В значении android:id нет знака плюса, потому что идентификатор уже существует, как показано в примере ids.xml. Если вы указываете идентификатор для XML-ресурса с помощью знака плюса в формате android:id="@+id/name", это означает, что идентификатор "name" ещё не существует и будет создан.

В следующем примере фрагмент кода использует идентификатор "dialog_exit" как уникальный идентификатор диалогового окна:

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

В одном приложении при создании диалога сравнивается идентификатор "dialog_exit":

Kotlin

override fun onCreateDialog(id: Int): Dialog? {
    return when(id) {
        R.id.dialog_exit -> {
            ...
        }
        else -> {
            null
        }
    }
}

Java

protected Dialog onCreateDialog(int id) {
    Dialog dialog;
    switch(id) {
    case R.id.dialog_exit:
        ...
        break;
    default:
        dialog = null;
    }
    return dialog;
}

Целое число

Целое число, определенное в XML.

Примечание. Целое число – это простой ресурс, на который ссылаются с помощью значения, указанного в атрибуте name, а не имени XML-файла. Таким образом, вы можете объединить целочисленные ресурсы с другими простыми ресурсами в одном XML-файле в одном элементе <resources>.

местоположение файла;
res/values/filename.xml
Название файла может быть любым. В качестве идентификатора ресурса используется атрибут name элемента <integer>.
ссылка на ресурс:
В Java: R.integer.integer_name
В XML: @[package:]integer/integer_name
Синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>
elements:
<resources>
Обязательный атрибут. Это корневой узел.

Нет атрибутов.

<integer>
Целое число.

Атрибуты:

name
Строка. Название целого числа. Он используется в качестве идентификатора ресурса.
пример:

XML-файл сохранен в res/values/integers.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="max_speed">75</integer>
    <integer name="min_speed">5</integer>
</resources>

Следующий код приложения извлекает целое число:

Kotlin

val maxSpeed: Int = resources.getInteger(R.integer.max_speed)

Java

Resources res = getResources();
int maxSpeed = res.getInteger(R.integer.max_speed);

Массив целых чисел

Массив целых чисел, определенных в XML.

Примечание. Массив целых чисел – это простой ресурс, на который ссылаются с помощью значения, указанного в атрибуте name, а не имени XML-файла. Таким образом, вы можете объединить ресурсы массива целых чисел с другими простыми ресурсами в одном XML-файле под одним элементом <resources>.

местоположение файла;
res/values/filename.xml
Название файла может быть любым. В качестве идентификатора ресурса используется атрибут name элемента <integer-array>.
скомпилированный тип данных ресурса:
Указатель ресурса на массив целых чисел.
ссылка на ресурс:
В Java: R.array.integer_array_name
В XML: @[package:]array/integer_array_name
Синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>
elements:
<resources>
Обязательный атрибут. Это корневой узел.

Нет атрибутов.

<integer-array>
Определяет массив целых чисел. Содержит один или несколько дочерних элементов <item>.

Атрибуты:

android:name
Строка. Название массива. Это название используется в качестве идентификатора ресурса для ссылки на массив.
<item>
Целое число. Значение может быть ссылкой на другой целочисленный ресурс. Должен быть дочерним по отношению к элементу <integer-array>.

Нет атрибутов.

пример:
XML-файл сохранен в res/values/integers.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array name="bits">
        <item>4</item>
        <item>8</item>
        <item>16</item>
        <item>32</item>
    </integer-array>
</resources>

Следующий код приложения извлекает целочисленный массив:

Kotlin

val bits: IntArray = resources.getIntArray(R.array.bits)

Java

Resources res = getResources();
int[] bits = res.getIntArray(R.array.bits);

Типизированный массив

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

Примечание. Типизированный массив – это простой ресурс, на который ссылаются с помощью значения, указанного в атрибуте name, а не имени XML-файла. Таким образом, вы можете объединить ресурсы типизированных массивов с другими простыми ресурсами в одном XML-файле под одним элементом <resources>.

местоположение файла;
res/values/filename.xml
Название файла может быть любым. В качестве идентификатора ресурса используется атрибут name элемента <array>.
скомпилированный тип данных ресурса:
Указатель ресурса на TypedArray.
ссылка на ресурс:
В Java: R.array.array_name
В XML: @[package:]array/array_name
Синтаксис:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>
elements:
<resources>
Обязательный атрибут. Это корневой узел.

Нет атрибутов.

<array>
Определяет массив. Содержит один или несколько дочерних элементов <item>.

Атрибуты:

android:name
Строка. Название массива. Это название используется в качестве идентификатора ресурса для ссылки на массив.
<item>
Общий ресурс. Значение может быть ссылкой на ресурс или простым типом данных. Должен быть дочерним по отношению к элементу <array>.

Нет атрибутов.

пример:
XML-файл сохранен в res/values/arrays.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array name="icons">
        <item>@drawable/home</item>
        <item>@drawable/settings</item>
        <item>@drawable/logout</item>
    </array>
    <array name="colors">
        <item>#FFFF0000</item>
        <item>#FF00FF00</item>
        <item>#FF0000FF</item>
    </array>
</resources>

В следующем коде приложения извлекается каждый массив, а затем – первая запись в каждом массиве:

Kotlin

val icons: TypedArray = resources.obtainTypedArray(R.array.icons)
val drawable: Drawable = icons.getDrawable(0)

val colors: TypedArray = resources.obtainTypedArray(R.array.colors)
val color: Int = colors.getColor(0,0)

Java

Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);

TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);