Bienvenidos sean a este post, hoy hablaremos sobre los recursos que tendremos disponibles para desarrollar nuestras apps.
Como vimos en el post anterior, crear nuevos recursos no es dificil y estos pueden ser de dos tipos: carpetas o archivos y al igual que en un S.O uno va a contener al otro, tambien como vimos en este post, conocimos la existencia de un objeto llamado R creado de la clase View, este objeto es automatico y esta creado por todos los recursos disponibles y por este motivo no es necesario generarlo sino que solo bastara con invocarlo porque estara a nuestra disposicion en todo momento.
A continuacion hablaremos sobre una breve descripcion de los recursos disponibles y el id asignado a cada uno de ellos, lo optimo de cada uno de los recursos es que tienen una funcion asignada, veamos los recursos de tipo carpeta:
Carpeta | Identificador | Descripcion |
res/drawable | R.drawable | Puede contener ficheros en formato .jpeg, .png o .gif, tambien en formato .9.png y archivos XML con descriptores graficos donde guardara los graficos utilizados en nuestra app y las mismas pueden ser escaladas |
res/mipmap | R.mipmap | Puede contener ficheros de formato .jpeg, .png o .gif, a diferencia del recurso anterior, las imagenes no son reescaladas y la app elegira la mas apropiada a la resolucion o profundidad de la pantalla (dpi) |
res/layout | R.layout | Contiene ficheros donde se almacenan los archivos XML para los layouts usados en la app |
res/menu | R.menu | Contiene los archivos XML donde se definen los menus, estos pueden ser asignados a una vista o a una actividad |
res/anim | R.anim | Permite definir animaciones de Tween (animaciones de vista) |
res/animator | R.animator | Contiene archivos XML que permiten modificar las propiedades de un objeto a lo largo del tiempo, disponible a partir de la version 3.0 |
res/xml | R.xml | Contiene otros archivos XML, por ejemplo los de preferencias |
res/raw | R.raw | Puede contener archivos binarios, por ejemplo audio o video |
res/values | R.values | Contiene archivos XML que definen valores para el estilo, los textos, etc como hemos visto hasta ahora |
Ahora para hablar de los otros tipos de recursos (archivos) vamos a ver los posibles dentro del recurso values porque los otros en realidad son archivos para la estetica de la app y estos contienen mas variedad:
Archivo | Identificador | Descripcion |
strings.xml | R.string | Identifica cadena de caracteres, por ejemplo app_name donde ira el nombre de nuesta app, como hemos visto en este post |
colors.xml | R.color | Permite definir colores en formato ARGB (alfa, rojo, verde y azul), el valor es en hexadecimal y pueden ser #RGB, #ARGB, #RRGGBB y #AARRGGBB |
dimensions.xml | R.dimen | Almacena numeros seguidos de una unidad de medida de la pantalla |
styles.xml | R.style | Definen una serie de atributos que pueden ser aplicados a una vista o una actividad |
Nota: En el caso de R.dimen les recomiendo este post donde comento sobre los distintos tipos de unidades dispobnibles.
Si bien nosotros podemos definir los archivos con los nombres sugeridos (p.e. strings.xml) esto no es obligatorio, aunque si es recomendado como una buena practica y organizacion, ahora vamos a ver otros tipos de variables que podemos definir en uno de los archivos antes mencionados, o en cualquier otro:
Identificador | Descripcion |
R.int | Lo usamos para definir un valor de tipo entero (Integer) por ejemplo: < integer name=»ventanas» >5< /integer > |
R.bool | Se utiliza para definir un tipo booleano: < bool name=»mantenervent» >true< / bool > |
R.id | Define un id unico para un elemento. Habitualmente se define por medio del atributo id pero tambien se puede definir previamente de esta forma: < item type=»id» name=»uindous» / > |
R.array | Con esta definimos un array, es decir una serie ordenada de elementos, pueden ser del tipo cadena (string), entera (integer) o de recursos (TypedArray), se define de esta forma: < integer-array name=»primos» > < item >2< /item >< item >3< /item >< item >5< /item > < /integer-array > |
Para continuar hablemos un poco sobre los recursos del sistema, se llama asi a los recursos propios del sistema Android, los cuales no generan mas espacio porque son propios del sistema operativo, tampoco producen un mayor consumo de memoria, y una gran ventaja es que los usuarios pueden estar mas familiarizados con ellos, por ejemplo el recurso:
android.R.drawable.ic_menu_edit
Este es el icono del lapiz, el cual la mayoria ya esta acostumbrado a relacionarlo con la accion de editar, otro ejemplo es el siguiente tema para ser utilizado:
android.R.style.Theme_panel
Donde cada version de Android tendra un diseño diferente pero acorde al resto del telefono y nos ahorraria tiempo de preparacion de la vista, por ultimo lo bueno de este metodo es que se ajustan automaticamente al entorno tanto en tamaño de pantalla, como en idioma, etc.
Esto es practico pero no quita que nosotros queramos darle un toque mas personal a nuestra app pero como digo siempre, queda a criterio del programador, por ultimo vamos a ver como acceder a los recursos y estos se pueden acceder de dos formas, pasemos a verlas.
XML
Para acceder via XML se puede hacer de la siguiente manera:
<ImageView
android:layout_height="@dimen/alto"
android:layout_width="match_parent"
android:background="@drawable/asteroide"
android:text="@string/texto"
android:text_color="@color/verde_opaco" />
Aca como pueden ver, cada vez que necesitamos utilizar alguna de la informacion almacenada en los archivos XML, lo identificamos por medio de la arroba (@) seguido de la id del archivo y luego el nombre del tag creado internamente, analicemos una linea:
android:text="@string/texto"
Por ejemplo, el @string es el indicador de que debe utilizar el archivo strings.xml, luego indicamos el uso del atributo llamado texto y el contenido del mismo sera asignado al texto del elemento ImageView como ven no es tan dificil utilizar el XML en los elementos de nuestra app.
JAVA
Este si va a ser un poco mas complejo porque nosotros deberemos crear nuestros objetos, asignarles los metodos pertinentes para que la app se encargue de ubicarlos en el sitio correcto, veamos un pequeño ejemplo:
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.asteroide);
String texto = res.getString(R.string.texto);
int color = res.getColor(R.color.verde_opaco);
Estas son las mismas tres lineas a las del ejemplo anterior pero un poco mas complejas y ahora veremos el porque.
Primero deberan crear un objeto de la clase resources llamado res, el cual contendra el metodo getResources() y despues deberemos crear las variables necesarias para poder almacenar toda la informacion a utilizar, veamos la linea del ejemplo anterior:
String texto = res.getString(R.string.texto);
Para este caso primero creamos una variable de tipo String llamada texto y a este le vamos a asignar por medio del metodo getString() del objeto res, el valor del objeto R, en el archivo strings.xml y el atributo texto, suena complicado pero no lo es ya que basicamente es lo mismo, y los programadores en Java se pueden sentir mas comodos con este modo de acceder a la informacion pero veamos un par de contras, primero obviamente el codigo va a ser mucho mas largo y por ende va a ocupar mas espacio, segundo vamos a utilizar mas memoria porque necesitamos crear las variables y objetos para poder acceder a los metodos pero obviamente siempre va a quedar al criterio de cada uno.
En esto, siempre recomiendo utilizar un lugar intermedio donde se debe utilizar las ventajas de cada forma, por ejemplo con codigo siempre tendremos mas posibilidades de capturar eventos o acciones y poder cambiar los estados, y con el XML tendremos todo en un solo lugar y sabremos que ante cuaqluier error o discrepancia del resultado final lo vamos a encontrar ahi y como pudimos ver puede ser muchisimo mas practico.
En resumen, hoy hemos visto como pueden ser los recursos, cuales tenemos disponibles de forma predeterminada, muy por arriba los recursos del sistema y sus ventajas y las distintas formas de poder utilizar nuestros recursos. Espero les haya gustado, sigueme en Twitter, Facebook o Google+ para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.
Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar
Es para mantenimiento del sitio, gracias!
$1.50