Bienvenidos sean a este post, hoy hablaremos sobre los recursos que tendremos disponibles para desarrollar nuestras apps.

Anuncios

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:

Anuncios
CarpetaIdentificadorDescripcion
res/drawableR.drawablePuede 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/mipmapR.mipmapPuede 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/layoutR.layoutContiene ficheros donde se almacenan los archivos XML para los layouts usados en la app
res/menuR.menuContiene los archivos XML donde se definen los menus, estos pueden ser asignados a una vista o a una actividad
res/animR.animPermite definir animaciones de Tween (animaciones de vista)
res/animatorR.animatorContiene archivos XML que permiten modificar las propiedades de un objeto a lo largo del tiempo, disponible a partir de la version 3.0
res/xmlR.xmlContiene otros archivos XML, por ejemplo los de preferencias
res/rawR.rawPuede contener archivos binarios, por ejemplo audio o video
res/valuesR.valuesContiene 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:

Anuncios
ArchivoIdentificadorDescripcion
strings.xmlR.stringIdentifica cadena de caracteres, por ejemplo app_name donde ira el nombre de nuesta app, como hemos visto en este post
colors.xmlR.colorPermite definir colores en formato ARGB (alfa, rojo, verde y azul), el valor es en hexadecimal y pueden ser #RGB, #ARGB, #RRGGBB y #AARRGGBB
dimensions.xmlR.dimenAlmacena numeros seguidos de una unidad de medida de la pantalla
styles.xmlR.styleDefinen 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:

Anuncios
IdentificadorDescripcion
R.intLo usamos para definir un valor de tipo entero (Integer) por ejemplo:
< integer name=”ventanas” >5< /integer >
R.boolSe utiliza para definir un tipo booleano:
< bool name=”mantenervent” >true< / bool >
R.idDefine 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.arrayCon 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.

Anuncios

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.

Anuncios

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.

Anuncios

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.

Anuncios

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.

Anuncios

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.

Anuncios

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.00