Cómo adaptar aplicaciones según el dispositivo: Android


Buenas, hoy toca una de esas entradas un poco escuetas pero necesarias. Vamos a ver como modificar nuestra aplicación según el contexto en el que nos encontremos. Todos los que estáis un poco al tanto del mundo Android sabéis de la infinidad de dispositivos que hay, desde pequeños dispositivos como Samsung Galaxy Mini, pasando por los HTC Desire y llegando a las tablets como las Asus.


El sueño en el mundo Android en el que cada usuario puede encontrarse un dispositivo a su medida, se puede convertir en la pesadilla de muchos de los desarrolladores, ya que el cliente siempre te va a exigir que la aplicación que llevas tanto tiempo preparando se vea bien en todos los dispositivos.



No temáis, al menos en parte. Android nos proporciona una forma bastante simple de poder configurar el entorno en el que se desarrolla nuestra aplicación a través de los nombres de las carpetas.

Si habéis empezado un nuevo proyecto Android, os habréis fijado que dentro de la carpeta res ya hay tres carpetas que empiezan drawable y terminan por hdpi, ldpi y mdpi, y su finalidad es tener diferentes versiones de una misma imagen para las diferentes densidades de pantalla. Será luego el sistema Android el que en tiempo de ejecución decidirá de que carpeta cogerla. Es decir, si tenemos una imagen llamada background.png en cada una de las carpetas, y estamos utilizando un teléfono como el Samsung Galaxy Nexus, se cogerá la que esté en la carpeta drawable-hdpi, la de alta densidad. ¿Que pasa si no hay ninguna imagen en esa carpeta? Pues que irá a la siguiente carpeta a la ldpi.

Se puede tener también una carpeta con el nombre drawable, sin nada más. Ahí se podrán poner imágenes que no van a tener más que una única versión, o archivos xml como los que hemos utilizado en alguna ocasión para customizar los controles.

Esto mismo se puede aplicar por ejemplo a otro tipo de carpetas. ¿Que pasa cuando tenemos una pantalla que en función de si está en modo "portrait" o "landscape" (en modo horizontal o vertical) es diferente? Podemos tener nuestra carpeta layout para la mayoría de nuestras pantallas y en nuestras excepciones podemos crear una carpeta layout-port (portrait) y otra layout-land (landscape) en las cuales tendremos las diferentes versiones de una pantalla o layout.

Otra de las posibilidades es con los estilos, si hemos sido cuidadosos y hemos ido aplicando estilos a los controles que hemos creado, podemos controlar ciertos casos como por ejemplo en pantallas de tablet, en los cuales las dimensiones de ciertos elementos pueden parecer desproporcionadas si hacemos que crezcan todo el ancho de pantalla. Para estos casos podemos utilizar la terminación xlarge.

La forma de crear esto para los estilos sería llamar a la carpeta donde están los estilos values-xlarge, y en vez de copiar y pegar el archivo entero de styles.xml, creamos un nuevo styles.xml y solamente debemos copiar y modificar aquel estilo que necesitemos. Aquí podéis ver un ejemplo de según que dispositivo estemos utilizando va a tomar unos estilos u otros para darle el tamaño a la ventana emergente.





Otra cosa bastante interesante que se puede hacer es combinar estas terminaciones. Por ejemplo, si solo queremos aplicar un estilo a pantallas de tablet cuando están en modo portrait, debemos llamar a la carpeta values-xlarge-port. Una forma muy útil de arreglar aquellas excepciones que de otra forma serían un quebradero de cabeza. Fijaros que siempre es primero el nombre de la carpeta, luego un guión, después el parámetro y si necesitamos más parámetros volvemos a poner el guión, parámetro...

La última mención es para los idiomas. Para poder traducir de una forma sencilla una aplicación debemos seguir esta misma lógica. En el archivo strings.xml podemos almacenar cadenas de texto para luego utilizarlas en nuestra aplicación de la misma forma que hacemos referencia a un objeto drawable o un layout.

Para poder traducir simplemente creamos una nueva carpeta values y añadimos el código del idioma, por ejemplo, para inglés sería en, italiano it o alemán de. Esta vez si duplicamos el archivo strings.xml y lo copiamos en la nueva carpeta y traducimos los textos. Si cambiamos la configuración de nuestro teléfono ponemos uno de los nuevos idiomas, podemos comprobar que nuestra aplicación está traducida.

Como veis es una forma sencilla de configurar diversos parámetros de nuestra aplicación sin tener que hacer grandes esfuerzos ni cosas raras. Espero que os sea útil.

No quiero despedirme por esta semana sin antes recordaros la iniciativa Proyecto Software Libre que hemos empezado ayer y en la que nos gustaría que todos los que queráis participéis de una forma u otra. Espero que os animéis.

Comments are closed.