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. Elname
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:
- 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 valor 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. Elname
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:
- 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. Elname
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:
- 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:
- 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 widgetButton
:<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 deids.xml
anterior. Cuando especificas un ID a un recurso XML con el signo más, en el formatoandroid: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. Elname
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:
- 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. Elname
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:
- 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. Elname
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:
- 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);