Ya está disponible la segunda Vista previa para desarrolladores de Android 11; pruébala y comparte tus comentarios.

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.
Arreglo de enteros
Es un recurso XML que proporciona un arreglo de números enteros.
Arreglo escrito
Es un recurso XML que proporciona un TypedArray (que puedes usar para un arreglo 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 XML). Por lo tanto, puedes combinar recursos bool con otros recursos simples en el archivo XML, en un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo ("filename") es arbitrario. Se utilizará el name del elemento <bool> como ID de 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 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-Rojo-Verde-Azul en uno de los siguientes formatos:

  • #RVA
  • #ARVA
  • #RRVVAA
  • #AARRVVAA

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 XML). Por lo tanto, puedes combinar recursos de color con otros recursos simples en un archivo XML, bajo un elemento <resources>.

ubicación del archivo:
res/values/colors.xml
El nombre del archivo ("filename") 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 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 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 se recomienda esta unidad de medida porque la representación real puede variar entre dispositivos; cada uno puede tener un número diferente de píxeles por pulgada y puede 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 XML). Por lo tanto, puedes combinar recursos de dimensión con otros recursos simples en un archivo XML bajo un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo ("filename") 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 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 XML). Por lo tanto, puedes combinar recursos de ID con otros recursos simples en el único archivo 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 ("filename") 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 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" al crear 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 XML). Por lo tanto, puedes combinar recursos enteros con otros recursos simples en un archivo XML bajo un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo ("filename") 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 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);
    

Arreglo de enteros

Un arreglo de enteros definidos en XML.

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

ubicación del archivo:
res/values/filename.xml
El nombre del archivo ("filename") 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 arreglo 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 arreglo de enteros. Contiene uno o más elementos secundarios <item>.

atributos:

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

Sin atributos.

ejemplo:
Archivo 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 arreglo de números enteros:

Kotlin

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

Java

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

Arreglo escrito

Es un TypedArray definido en XML. Puedes utilizar esta opción para crear un arreglo de otros recursos, como los elementos de diseño. Ten en cuenta que no es necesario que el arreglo sea homogéneo. Por lo tanto, puedes crear un arreglo 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 arreglo escrito es un recurso simple al que se hace referencia mediante el valor proporcionado en el atributo name (no el nombre del archivo XML). Por lo tanto, puedes combinar recursos de arreglo escrito con otros recursos simples en un archivo XML bajo un elemento <resources>.

ubicación del archivo:
res/values/filename.xml
El nombre del archivo ("filename") 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 arreglo. Contiene uno o más elementos secundarios <item>.

atributos:

android:name
String. Es un nombre para el arreglo. Se usará como ID de recurso para hacer referencia al arreglo.
<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 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 arreglo 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);