Больше типов ресурсов

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

Бул
XML-ресурс, который несет логическое значение.
Цвет
Ресурс XML, содержащий значение цвета (шестнадцатеричный цвет).
Измерение
Ресурс XML, содержащий значение измерения (с единицей измерения).
ИДЕНТИФИКАТОР
Ресурс XML, предоставляющий уникальный идентификатор ресурсов и компонентов приложения.
Целое число
Ресурс XML, который содержит целочисленное значение.
Целочисленный массив
XML-ресурс, предоставляющий массив целых чисел.
Типизированный массив
Ресурс XML, предоставляющий TypedArray (который можно использовать для массива объектов рисования).

Бул

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

Примечание. Логическое значение — это простой ресурс, ссылка на который осуществляется с использованием значения, указанного в атрибуте name , а не имени XML-файла. Таким образом, вы можете комбинировать ресурсы bool с другими простыми ресурсами в одном 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>
элементы:
<resources>
Необходимый. Это корневой узел.

Никаких атрибутов.

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

Атрибуты:

name
Нить . Имя для значения bool. Он используется в качестве идентификатора ресурса.
пример:
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>

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

Котлин

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

Ява

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" .

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

  • # RGB
  • # АРГБ
  • # РРГГББ
  • # ААРРГГББ

Примечание. Цвет — это простой ресурс, ссылка на который осуществляется с использованием значения, указанного в атрибуте 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>
элементы:
<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>

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

Котлин

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

Ява

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. Размер указывается числом, за которым следует единица измерения, например 10 пикселей, 2 дюйма или 5 сп. Android поддерживает следующие единицы измерения:

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

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

sp
Независимые от масштаба пиксели. Это похоже на единицу измерения dp, но она также масштабируется в соответствии с предпочтениями пользователя по размеру шрифта. Рекомендуется использовать эту единицу измерения при указании размеров шрифта, чтобы они были скорректированы как с учетом плотности экрана, так и с учетом предпочтений пользователя.
pt
Баллы: 1/72 дюйма в зависимости от физического размера экрана при разрешении экрана 72 точки на дюйм.
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>
элементы:
<resources>
Необходимый. Это корневой узел.

Никаких атрибутов.

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

Атрибуты:

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>

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

Котлин

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

Ява

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"/>

ИДЕНТИФИКАТОР

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

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

расположение файла:
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>
элементы:
<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 » используется идентификатор "button_ok" :

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

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

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

Котлин

showDialog(R.id.dialog_exit)

Ява

showDialog(R.id.dialog_exit);

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

Котлин

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

Ява

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>
элементы:
<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>

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

Котлин

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

Ява

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>
элементы:
<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>

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

Котлин

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

Ява

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

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

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

Примечание. Типизированный массив — это простой ресурс, ссылка на который осуществляется с использованием значения, указанного в атрибуте 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>
элементы:
<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>

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

Котлин

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)

Ява

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);