Tipos de recursos
La definición de los recursos en Android es un aspecto muy importante en el diseño de una aplicación. Una de sus principales ventajas es que facilita a los diseñadores gráficos e introductores de contenido trabajar en paralelo con los programadores.
Añadir un recurso a nuestra aplicación es muy sencillo, no tenemos más que añadir un fichero dentro de una carpeta determinada de nuestro proyecto. Para cada uno de los recursos que añadamos el sistema crea, de forma automática, un id de recurso dentro de la clase R.
Tipos de recursos
Según la carpeta que utilicemos el recurso creado será de un tipo específico. Pasamos a enumerar las carpetas y tipos posibles:
Carpeta |
Descripción |
res/drawable/ |
Ficheros en bitmap (.png, .jpg o .gif). Ficheros PNG en formato Nine-patch (.9.png). Ficheros XML con descriptores gráficos (ver clase Drawable) |
res/mipmap/ R.mipmap |
Ficheros en bitmap (.png, .jpg o .gif). Estos gráficos no son rescaldados para adaptarlos a la densidad gráfica del dispositivo, sino que se buscará en las subcarpetas el gráfico con la densidad más parecida y se utilizará directamente. |
res/layout/ |
Ficheros XML con los Layouts usados en la aplicación. |
res/menu/ |
Ficheros XML con la definición de menús. Podemos asignar una actividad o una vista. |
res/anim/ |
Fichero XML que permiten definir una animaciones Tween también conocidas como animaciones de vista. |
res/animator |
Ficheros XML que permiten modificar las propiedades de un objeto a lo largo del tiempo. (Véase apartado "Animación de propiedades"). Solo desde la versión 3.0. |
res/xml/ |
Otros ficheros XML, como los ficheros de preferencias |
res/raw/ |
Ficheros que se encuentran en formato binario. Por ejemplo ficheros de audio o vídeo. |
res/values/ |
Ficheros XML que definen un determinado valor para definir un color, estilo, cadena de caracteres, etc. Se describen en la siguiente tabla. |
Tabla: Tipos de recursos según carpeta en Android.
Veamos los tipos de recursos que encontramos dentro de la carpeta values:
Fichero por defecto |
Descripción |
strings.xml |
Identifica cadenas de caracteres <string name="saludo">¡Hola Mundo!</string> |
colors.xml |
Un color definido en formato ARGB (alfa, rojo, verde y azul). Los valores se indican en hexadecimal en uno de los siguientes formatos: #RGB, #ARGB, #RRGGBB ó #AARRGGBB <color name="verde_opaco">#0f0</color> |
dimensions.xml |
Un número seguido de una unidad de medida. px - pixeles, mm - milímetros, in – pulgadas, pt – puntos (=1/72 pulgadas), dp – píxeles independientes de la densidad (=1/160 pulgadas), sp – igual que dp pero cambia según las preferencias de tamaño de fuente. <dimen name="alto">2.2mm</dimen> |
styles.xml |
Definen una serie de atributos que pueden ser aplicados a una vista o a una actividad. Si se aplican a una actividad se conocen como temas. <style name="TextoGrande" parent="@style/Text"> |
R.int |
Define un valor entero. <integer name="max_asteroides">5</integer> |
R.bool |
Define un valor booleano. <bool name="misiles_ilimitados">true</bool> |
R.id |
Define un recurso de id único. La forma habitual de asignar id a los recursos es utilizando el atributo <item type="id" name="button_ok"/> |
R.array |
Una serie ordenada de elementos. Pueden ser de strings, de enteros o de recursos (TypedArray) <string-array name="dias_semana"> < <item>lunes</item> <integer-array name="primos"> |
Tabla: Tipos de recursos en carpeta values.
Aunque el sistema crea ficheros que aparecen en la columna de la izquierda de la tabla anterior y se recomienda definir los recursos de cadena dentro de strings.xml, hay que resaltar que no es más que una sugerencia de organización. Sería posible mezclar cualquier tipo de recurso de esta tabla dentro de un mismo fichero y poner a este fichero cualquier nombre.
video[Tutorial] Tipos de recursos en Android
Acceso a los recursos
Una vez definido un recurso este puede ser utilizado desde un fichero XML o desde Java. A continuación se muestra un ejemplo desde XML:
<ImageView
android:layout_height="@dimen/alto"
android:layout_width="match_parent"
android:background="@drawable/asteroide"
android:text="@string/saludo"
android:text_color="@color/verde_opaco"/>
Para acceder a un recurso definido en los ejemplos anteriores desde Java usaremos el siguiente código:
Resources res = getResources(); Drawable drawable = ContextCompat.getDrawable(R.drawable.asteroide); String saludo = res.getString(R.string.saludo); int color = ContextCompat.getColor(R.color.verde_opaco); float tamanoFuente = res.getDimension(R.dimen.tamano_fuente); int maxAsteroides = res.getInteger(R.integer.max_asteroides); boolean ilimitados = res.getBoolean(R.bool.misiles_ilimitados); String[] diasSemana = res.getStringArray(R.array.dias_semana); int[] primos = res.getIntArray(R.array.primos); TypedArray asteroides = res.obtainTypedArray(R.array.asteroides); Drawable asteroide1 = asteroides.getDrawable(0);
val drawable = ContextCompat.getDrawable( R.drawable.asteroide) val saludo = resources.getString(R.string.saludo) val color = ContextCompat.getColor(R.color.verde_opaco) val tamanoFuente = resources.getDimension(R.dimen.tamano_fuente) val maxAsteroides = resources.getInteger(R.integer.max_asteroides) val ilimitados = resources.getBoolean(R.bool.misiles_ilimitados) val diasSemana = resources.getStringArray(R.array.dias_semana) val primos = resources.getIntArray(R.array.primos) val asteroides = resources.obtainTypedArray(R.array.asteroides) val asteroide1 = asteroides.getDrawable(0)