En
el entorno de desarrollo Android, gran peso de lo que construyamos en nuestras
aplicaciones reside directamente en el uso de recursos, que son información,
archivos, elementos estáticos que se encuentran albergados fuera del código Ya
has hecho uso de los layouts para definir tus interfaces de usuario. Los layout
también son recursos.
Existen
muchos tipos de recursos que puedes utilizar y que puedes agregar a tu . Es
cierto que podemos manejar los directorios con los nombres de nuestra
preferencia pero resulta una best practice seguir convenciones a
la hora de elaborar nuestra estructura de directorios ya que esto permite
unificar nuestro trabajo y podrás ver su beneficio si te encuentras trabajando
en equipo.
Todos
los recursos se encuentran dentro del directorio res de nuestros proyectos
Android. Con la excepción de los recursos de tipo raw que se guardan en un
directorio con este mismo nombre, todos los demás recursos que utilicemos
deberán parsearse ya sea que lo hagamos nosotros manualmente o que el propio
sistema lo haga. Por ejemplo, cada vez que en una actividad le asignamos un
layout para que se muestre, el sistema gestiona el parseo correspondiente:
setContentView(R.layout.main);
Y
cuando instanciamos un elemento específico de un layout (llámese Button,
EditText, TextView, etc.) hacemos un parseo explícito para que podamos
utilizarlo dentro del código java:
TextView text = (TextView) findViewById(R.id.txt);
Entre
los recursos que podemos incluir en nuestros proyectos se encuentran:
§
Imágenes
(res/drawable), para colocar
iconos estáticos u otro tipo de imágenes en la interfaz de usuario.
§
Raw
(res/raw), para guardar
archivos arbitrarios que tienen una razón de ser en nuestra aplicación pero no
necesariamente para Android. Este directorio lo he utilizado para almacenar
archivos de audio y video.
§
Strings,
colores, arreglos y dimensiones (res/values), para almacenar todos estas constantes que
guardan los valores que podemos utilizar dentro de nuestra aplicación que nos
ayuda a separar la lógica de la aplicación con el contenido y formato de la
misma.
§
XML
(res/xml), para almacenar
archivos XML estáticos que contienen información o alguna estructura necesaria
dentro de nuestra aplicación.
Ventajas de utilizar strings por medio de recursos
Desacoplar
la información, no tengo mucho mas para agregar acà, quien ha tenido que
refactorizar código, o buscar pequeños cambios (agregar una Ñ o un acento, lo
sabe).
Soporte de imágenes en Android
Android
soporta imágenes en formato PNG, JPEG y GIF, pese a que este último es un
formato que rara vez se utiliza. Por el contrario, el uso de PNG es el más
recomendado para trabajar con imágenes. De esta forma, puedes utilizar las
imágenes que necesites en tus aplicaciones utilizando el formato la palabra drawable para mandarlos a
llamar desde tus archivos XML o desde el código Java.
Únicamente
es necesario que coloques tus imágenes en el directorio res/drawable y con esto podrás
referenciarlas como un recurso. A primera vista tal vez podrá confundirte un
poco el hecho de que existan los directorios drawable-hdpi, drawable-ldpi y drawable-mdpi. Esto se debe a que
Android no corre en un sólo dispositivo, sino que corre en infinidad de
dispositivos de diferentes fabricantes y con diferentes tamaños de pantalla. Si
bien resulta “sencillo” crear nuestros layouts flexibles para que se adapten a
cualquier tamaño de pantalla, esto se hace un poco diferente con las imágenes
que se mostrarán como iconos y otros elementos de la interfaz. Esta división se
hace para que Android “elija” entre los recursos que según la resolución del
dispositivo sean los mejores para conservar el look and feel de las aplicaciones.
Por
motivos de prueba quizás te resulte menos complicado crear un directorio
llamado drawable y dejar de
preocuparte por esa parte que finalmente es de la que se encargará el diseñador
de tu interfaz de usuario.
Teniendo
esto claro, para mandar a llamar una imagen desde un archivo de layout en XML
utilizamos el formato @drawable/[nombreDelArchivo]. Si por ejemplo
tuviéramos una imagen llamada icon.png, para llamarla, la
sentencia correcta sería @drawable/icon.
IMPORTANTE: El nombre del archivo
no incluye la extensión de la imagen ya que esto te generará errores en tiempo
de compilación. Así también, el formato para los nombres solo debe incluir
letras minúsculas y números, si usas mayúsculas y caracteres especiales
incluida la “ñ” puedes tener también errores.
Uso del directorio res/xml
Hay
ocasiones en las que nos resulta necesario hacer uso de recursos estáticos que
definamos en archivos XML, tal puede ser el caso de cuando definimos
propiedades para la aplicación, en cuyo caso hacemos uso de la siguiente línea
de código para mandar a llamar los valores:
addPreferencesFromResource(R.xml.preferences);
Existen
muchas otras aplicaciones que le pueden dar, así que tengan en cuenta que si
alguna vez requieren mostrar información estática dentro de la aplicación, el
uso de archivos XML puede ser muy útil, ya que además de separar el contenido
de la funcionalidad, también te será más fácil editar la información contenida
en el archivo.
Uso del directorio res/values
Además
de guardar las cadenas de texto en el típico archivo stings.xml del directoriores/values, también es posible
guardar otros archivos XML que contengan recursos tales como dimensiones,
colores, y arreglos. Cada uno de los archivos XML dónde definamos estos valores
deberán tener como elemento raíz a <resources></resources>.
- Dimensiones
Las
dimensiones regularmente se utilizan para describir distancias tal como el
atributo padding de algún widget. Como sabrás, podemos utilizar distintas
unidades de medida aparte de los pixeles:
§
in y mm para pulgadas y
milímetros respectivamente, y se basan en el tamaño de la pantalla.
§
pt para puntos. En
términos más sencillos, un punto equivale a 1/72 pulgadas basado en el
tamaño de la pantalla.
§
dip y sp para pixeles
independientes del dispositivo y pixeles independientes de la escala.
Generalmente recomiendo el uso de estas unidades porque son las que nos
permiten trabajar más fácil con toda la gama de diferentes tamaños de pantalla
de los dispositivos Android.
Para
definir una dimensión como recurso dentro de nuestro proyecto utilizamos una
etiqueta <dimen..> con un atributo name cuyo valor lo
identificará de los otros recursos disponibles. El valor de la dimensión irá
dentro de las etiquetas de apertura y cierre (<dimen></dimen>).
Dentro
de un archivo de layout podemos mandar a llamar una dimensión con el formato@dimen/[ValorDelAtributoName]. Si tomamos la
primera dimensión definida en el archivo anterior, la sentencia de llamado
quedaría como @dimen/thin.
Si
deseamos llamar una dimensión desde el código Java, la sentencia a utilizar es R.dimen.thin siguiendo el mismo
ejemplo.
- Colores
Los
colores en Android son valores en hexadecimal RGB con la opción de definir
también el valor para el canal alfa (que indica la transparencia-solidez de un
color). De esta manera podemos definir los colores bajo estos formatos:
§
#RGB
§
#ARGB
§
#RRGGBB
§
#AARRGGBB
Sí,
como puedes notar, es un formato muy parecido al que utilizamos en las hojas de
estilo en cascada para desarrollo web.
En
Android, estos valores en RGB se colocan como cadenas dentro de las
etiquetas <color…></color>. Cada una de las
etiquetas de apertura <color> poseen un atributo name que es el nombre que
identificará al color dentro de la aplicación.
De
manera muy similar a las dimensiones, los colores se llaman desde los archivos
XML con el formato @color/[NombreDelColor] y desde el código
Java con R.color.NombreDelColor.
- Arreglos
Los
arreglos están diseñados para guardar listas de strings que queramos desplegar
dentro de la aplicación. En el archivo dónde los definimos, necesitamos colocar
un elemento raíz con la etiqueta <string-array> cuyo atributo name será el identificador
que los diferencie de otro arreglo de valores. Dentro de estas etiquetas
colocamos elementos <item></item> que corresponde a
cada uno de los valores del arreglo:
Generalmente
mandamos a llamar arreglos desde el código Java siguiendo el formatoR.array.NombreDelArreglo.
Para
que tengamos una mejor organización y podamos así encontrar cada uno de estos
recursos te recomiendo que en los archivos XML que vayas a crear los nombres
intuitivamente, es decir, si vas a dedicar un XML a guardar todos los colores
que vas a utilizar llámalo como colors.xml y así para cada caso.
Es una best practice y créeme que tu equipo de desarrollo te lo agradecerá.
Espero
que con esta introducción al uso de recursos en Android se haga más fácil incluir
diferentes tipos de archivos en las aplicaciones y además segmentar de mejor
manera la parte de formato y contenido de la parte de lógica de la aplicación. Recuerden
que en Android trabajamos con el Model-View-Controller por lo que mientras
mejor lo implementen mejor irán las aplicaciones.
No hay comentarios:
Publicar un comentario