Más tipos de recursos

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

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 un archivo en formato XML, en un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. El name del elemento de <bool> se usa 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 es el nodo raíz.

Sin atributos.

<bool>
Un valor booleano: true o false.

Atributos:

name
Cadena. Es un nombre para el valor bool. Se usa como ID del 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>

El siguiente código de la aplicación obtiene el booleano:

Kotlin

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

Java

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

El siguiente XML de diseño usa 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, como 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, en un elemento <resources>.

ubicación del archivo:
res/values/colors.xml
El nombre del archivo es arbitrario. El name del elemento de <color> se usa 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 es el nodo raíz.

Sin atributos.

<color>
Es un color expresado en hexadecimal.

Atributos:

name
Cadena. Es un nombre para el color. Se usa como ID del 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>

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

El siguiente XML de diseño 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. Una dimensión se especifica con un número seguido de una unidad de medida, como 10 px, 2 in o 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 DPIs 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 de dp a píxel cambia con la densidad de la pantalla, pero no necesariamente de manera directa. Usar unidades dp en lugar de unidades px es una solución 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. Proporciona coherencia para los distintos tamaños del mundo real que tienen los elementos de la IU en diferentes dispositivos.

sp
Píxeles independientes de la escala: 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 recomendamos usar esta unidad, ya que la representación real puede variar según el dispositivo. Los diferentes dispositivos pueden tener una cantidad diferente de píxeles por pulgada y 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, en un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. El name del elemento de <dimen> se usa 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 es el nodo raíz.

Sin atributos.

<dimen>
Una dimensión, representada por un número de punto flotante seguido de una unidad de medida (dp, sp, pt, px, mm o in).

Atributos:

name
Cadena. Es un nombre para la dimensión. Se usa como ID del 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>

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

El siguiente XML de diseño 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 de los recursos de una aplicación (por ejemplo, un View en tu diseño de la 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 utilizando 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 un archivo en formato XML, en un elemento <resources>. Además, un recurso de ID no hace referencia a un elemento de recurso real: es un ID único 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 es el nodo raíz.

Sin atributos.

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

Atributos:

type
Debe ser "id".
name
Cadena. 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>

En el siguiente fragmento de diseño, se usa el ID de "button_ok" para un widget Button:

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

El valor android:id aquí no incluye el signo más en la referencia de ID, porque el ID ya existe, como se define en el ejemplo de ids.xml anterior. Cuando especificas un ID a un recurso XML con el signo más, en el formato android:id="@+id/name", significa que el ID de "name" aún no existe y se crea.

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

Kotlin

showDialog(R.id.dialog_exit)

Java

showDialog(R.id.dialog_exit);

En la misma aplicación, se compara el ID de "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 entero 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 entero con otros recursos simples en un archivo en formato XML, en un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. El name del elemento de <integer> se usa 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 es el nodo raíz.

Sin atributos.

<integer>
Es un entero.

Atributos:

name
Cadena. Es un nombre para el entero. Se usa como ID del 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>

El siguiente código de la aplicación obtiene un 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). De este modo, puedes combinar recursos de array de enteros con otros recursos simples en un archivo en formato XML, en un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. El name del elemento de <integer-array> se usa 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 es el nodo raíz.

Sin atributos.

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

Atributos:

android:name
Cadena. Es un nombre para el array. El nombre se usa como ID del recurso para hacer referencia al array.
<item>
Es un entero. El valor puede ser una referencia a otro recurso de entero. Debe ser 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>

El siguiente código de la aplicación obtiene el array de 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. No es necesario que el array sea homogéneo, por lo que puedes crear un array de tipos de recursos mixtos. Sin embargo, ten en cuenta cuáles son los tipos de datos y dónde están para que puedas obtener correctamente cada elemento con los métodos get...() de la clase TypedArray.

Nota: Un array escrito 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). De este modo, puedes combinar recursos de array escrito con otros recursos simples en un archivo en formato XML, en un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo es arbitrario. El name del elemento de <array> se usa 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 es el nodo raíz.

Sin atributos.

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

Atributos:

android:name
Cadena. Es un nombre para el array. El nombre se usa como ID del 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>

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