Más tipos de recursos

En esta página, se definen más tipos de recursos que puedes externalizar, incluidos los siguientes:

Bool
Es un recurso XML que contiene un valor booleano.
Color
Es un recurso XML que contiene un valor de color (un color hexadecimal).
Dimensión
Es un recurso XML que lleva un valor de dimensión (con una unidad de medida).
ID
Es un recurso XML que proporciona un identificador único para los recursos y componentes de la aplicación.
Entero
Es un recurso XML que contiene un valor entero.
Array de enteros
Es un recurso XML que proporciona un array de números enteros.
Array escrito
Es un recurso XML que proporciona un TypedArray (que puedes usar para un array de elementos de diseño).

Bool

Es un valor booleano definido en formato XML.

Nota: Un bool es un recurso simple al que se hace referencia utilizando el valor proporcionado en el atributo name (no el nombre del archivo en formato XML). Por lo tanto, puedes combinar recursos bool con otros recursos simples en el archivo en formato XML, en un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. Se usará el name del elemento <bool> como ID del recurso.
referencia del recurso:
En Java: R.bool.bool_name
En XML: @[package:]bool/bool_name
sintaxis:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool
        name="bool_name"
        >[true | false]</bool>
</resources>
elementos:
<resources>
Obligatorio. Este debe ser el nodo raíz.

Sin atributos.

<bool>
Un valor booleano: true o false.

atributos:

name
String. Es un nombre para el valor bool. Se usará como ID de recurso.
ejemplo:
Archivo en formato XML guardado en 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>

Este código de la aplicación obtiene el valor booleano:

Kotlin

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

Java

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

Este diseño XML utiliza el valor booleano para un atributo:

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

Color

Es un valor de color definido en XML. El color se especifica con un valor RGB y un canal Alfa. Puedes usar un recurso de color en cualquier lugar que acepte un valor de color hexadecimal. También puedes usar un recurso de color cuando se espera un recurso de elemento de diseño en XML (por ejemplo, android:drawable="@color/green").

El valor siempre comienza con un carácter numeral (#), seguido de la información Alfa-Red-Green-Blue (Alfa-Rojo-Verde-Azul) en uno de los siguientes formatos:

  • #RGB
  • #ARVA
  • #RRVVAA
  • #AARRGGBB

Nota: Un color es un recurso simple al que se hace referencia utilizando el valor proporcionado en el atributo name (no el nombre del archivo en formato XML). Por lo tanto, puedes combinar recursos de color con otros recursos simples en un archivo en formato XML, bajo un elemento <resources>.

ubicación del archivo:
res/values/colors.xml
El nombre del archivo es arbitrario. Se usará el name del elemento <color> como ID del recurso.
referencia del recurso:
En Java: R.color.color_name
En XML: @[package:]color/color_name
sintaxis:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color
        name="color_name"
        >hex_color</color>
</resources>
elementos:
<resources>
Obligatorio. Este debe ser el nodo raíz.

Sin atributos.

<color>
Es un color expresado en hexadecimal, como se describió anteriormente.

atributos:

name
String. Es un nombre para el color. Se usará como ID de recurso.
ejemplo:
Archivo en formato XML guardado en 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>

Este código de la aplicación obtiene el recurso de color:

Kotlin

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

Java

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

Este diseño XML aplica el color a un atributo:

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

Dimensión

Es un valor de dimensión definido en XML. Se especifica una dimensión con un número seguido de una unidad de medida. Por ejemplo: 10 px, 2 in, 5 sp. Android admite las siguientes unidades de medida:

dp
Píxeles independientes de la densidad: Es una unidad abstracta que se basa en la densidad física de la pantalla. Estas unidades son relativas a una pantalla de 160 DPI (puntos por pulgada), en la que 1 dp es aproximadamente 1 px. Cuando se utiliza una pantalla de mayor densidad, el número de píxeles que se usa para dibujar 1 dp se escala por un factor apropiado con respecto a los DPI de la pantalla. Del mismo modo, cuando se utiliza una pantalla de menor densidad, se reduce el número de píxeles usados para 1 dp. La proporción entre un dp y un píxel cambiará con la densidad de la pantalla, pero no necesariamente de manera directa. Usar unidades dp (en lugar de unidades px) es una solución simple para hacer que las dimensiones de la vista en tu diseño cambien de tamaño de manera adecuada en las diferentes densidades de pantalla. En otras palabras, proporciona coherencia para los distintos tamaños del mundo real que tienen los elementos de la IU en diferentes dispositivos.
sp
Píxeles escalables: Es similar a la unidad dp, pero también se ajusta según la preferencia de tamaño de fuente del usuario. Se recomienda usar esta unidad cuando se especifiquen tamaños de fuente, de modo que se ajusten tanto para la densidad de la pantalla como para la preferencia del usuario.
pt
Puntos: 1/72 de pulgada en función del tamaño físico de la pantalla, en el caso de pantallas con densidad de 72 DPI.
px
Píxeles: Corresponde a los píxeles reales en la pantalla. No se recomienda esta unidad de medida porque la representación real puede variar entre dispositivos; distintos dispositivos pueden tener una dimensión diferente de píxeles por pulgada y pueden tener más o menos píxeles totales disponibles en la pantalla.
mm
Milímetros: Según el tamaño físico de la pantalla
in
Pulgadas: Según el tamaño físico de la pantalla

Nota: Una dimensión es un recurso simple al que se hace referencia utilizando el valor proporcionado en el atributo name (no el nombre del archivo en formato XML). Por lo tanto, puedes combinar recursos de dimensión con otros recursos simples en un archivo en formato XML bajo un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. Se usará el name del elemento <dimen> como ID del recurso.
referencia del recurso:
En Java: R.dimen.dimension_name
En XML: @[package:]dimen/dimension_name
sintaxis:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen
        name="dimension_name"
        >dimension</dimen>
</resources>
elementos:
<resources>
Obligatorio. Este debe ser el nodo raíz.

Sin atributos.

<dimen>
Una dimensión, representada por un valor flotante, seguida de una unidad de medida (dp, sp, pt, px, mm, in), como se describió anteriormente.

atributos:

name
String. Es un nombre para la dimensión. Se usará como ID de recurso.
ejemplo:
Archivo en formato XML guardado en 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>

Este código de la aplicación obtiene una dimensión:

Kotlin

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

Java

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

Este diseño XML aplica dimensiones a los atributos:

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

ID

Es un ID de recurso único definido en XML. Usando el nombre que proporcionas en el elemento <item>, las herramientas para desarrolladores de Android crean un número entero único en la clase R.java de tu proyecto, que puedes usar como identificador para los recursos de una aplicación (por ejemplo, un View en tu diseño de IU) o un número entero único para usar en el código de tu aplicación (por ejemplo, como ID para un diálogo o un código de resultado).

Nota: Un ID es un recurso simple al que se hace referencia mediante el valor proporcionado en el atributo name (no el nombre del archivo en formato XML). Por lo tanto, puedes combinar recursos de ID con otros recursos simples en el único archivo en formato XML bajo un elemento <resources>. Además, recuerda que los recursos de un ID no hacen referencia a un elemento de recurso real; solo representan una identificación única que puedes adjuntar a otros recursos o usar como un número entero único en tu aplicación.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario.
referencia del recurso:
En Java: R.id.name
En XML: @[package:]id/name
sintaxis:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>
elementos:
<resources>
Obligatorio. Este debe ser el nodo raíz.

Sin atributos.

<item>
Define un ID único. No tiene valor, solo atributos.

atributos:

type
Debe ser "id".
name
String. Es un nombre único para el ID.
ejemplo:

Archivo en formato XML guardado en 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>

A continuación, este fragmento de diseño utiliza el ID "button_ok" para un widget Botón:

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

Observa que el valor android:id no incluye el signo más en la referencia de ID, porque el ID ya existe, como se define en el ejemplo anterior de ids.xml. (Cuando se especifica un ID para un recurso XML con el signo +, en formato android:id="@+id/name", significa que el ID de "name" no existe y se debe crear).

Otro ejemplo: El siguiente fragmento de código usa el ID "dialog_exit" como identificador único para un diálogo:

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

En la misma aplicación, se compara el ID "dialog_exit" cuando se crea un diálogo:

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

Entero

Es un entero definido en XML.

Nota: Un número entero es un recurso simple al que se hace referencia mediante el valor proporcionado en el atributo name (no el nombre del archivo en formato XML). Por lo tanto, puedes combinar recursos enteros con otros recursos simples en un archivo en formato XML bajo un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. Se usará el name del elemento <integer> como ID del recurso.
referencia del recurso:
En Java: R.integer.integer_name
En XML: @[package:]integer/integer_name
sintaxis:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer
        name="integer_name"
        >integer</integer>
</resources>
elementos:
<resources>
Obligatorio. Este debe ser el nodo raíz.

Sin atributos.

<integer>
Es un valor entero.

atributos:

name
String. Es un nombre para el valor entero. Se usará como ID de recurso.
ejemplo:

Archivo en formato XML guardado en 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>

Este código de aplicación obtiene un número entero:

Kotlin

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

Java

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

Array de enteros

Un array de enteros definidos en XML.

Nota: Un array de enteros es un recurso simple al que se hace referencia utilizando el valor proporcionado en el atributo name (no el nombre del archivo en formato XML). Por lo tanto, puedes combinar recursos de array de números enteros con otros recursos simples en el único archivo en formato XML bajo un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. Se usará el name del elemento <integer-array> como ID del recurso.
tipo de datos de recursos compilados:
Puntero del recurso a un array de números enteros.
referencia del recurso:
En Java: R.array.integer_array_name
En XML: @[package:]array/integer_array_name
sintaxis:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer-array
        name="integer_array_name">
        <item
            >integer</item>
    </integer-array>
</resources>
elementos:
<resources>
Obligatorio. Este debe ser el nodo raíz.

Sin atributos.

<integer-array>
Define un array de enteros. Contiene uno o más elementos secundarios <item>.

atributos:

android:name
String. Es un nombre para el array. Se usará como ID de recurso para hacer referencia al array.
<item>
Es un valor entero. El valor puede ser una referencia a otro recurso de número entero. Tiene que ser un elemento secundario de un elemento <integer-array>.

Sin atributos.

ejemplo:
Archivo en formato XML guardado en 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>

Este código de la aplicación obtiene el array de números enteros:

Kotlin

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

Java

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

Array escrito

Es un TypedArray definido en XML. Puedes utilizar esta opción para crear un array de otros recursos, como los elementos de diseño. Ten en cuenta que no es necesario que el array sea homogéneo. Por lo tanto, puedes crear un array de tipos de recursos mixtos, pero debes conocer los tipos de datos que incluye para poder obtener cada elemento con los métodos get...() de TypedArray.

Nota: Un array escrito es un recurso simple al que se hace referencia mediante el valor proporcionado en el atributo name (no el nombre del archivo en formato XML). Por lo tanto, puedes combinar recursos de array escrito con otros recursos simples en un archivo en formato XML bajo un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. Se usará el name del elemento <array> como ID del recurso.
tipo de datos de recursos compilados:
Puntero de recursos a un TypedArray.
referencia del recurso:
En Java: R.array.array_name
En XML: @[package:]array/array_name
sintaxis:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <array
        name="integer_array_name">
        <item>resource</item>
    </array>
</resources>
elementos:
<resources>
Obligatorio. Este debe ser el nodo raíz.

Sin atributos.

<array>
Define un array. Contiene uno o más elementos secundarios <item>.

atributos:

android:name
String. Es un nombre para el array. Se usará como ID de recurso para hacer referencia al array.
<item>
Es un recurso genérico. El valor puede ser una referencia a un recurso o un tipo de datos simple. Debe ser elemento secundario de un elemento <array>.

Sin atributos.

ejemplo:
Archivo en formato XML guardado en 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>

Este código de la aplicación obtiene cada array y, luego, la primera entrada de cada uno de ellos:

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