jueves, 19 de mayo de 2011

Preferencias de Aplicacion en Android

Hola a todos en esta ocasión quiero compartirles una manera muy sencilla de guardar y retraer preferencias en las aplicaciones de Android. Las configuraciones son una parte muy importante en toda aplicación de software, y Android no es la excepción, ayudan a determinar el comportamiento del programa, habilitar o des-habilitar funciones e incluso guardar preferencias de usuario para hacer a la aplicación mas inteligente. Dentro de la plataforma de Android las configuraciones o preferencias son almacenadas en archivos XML en el directorio dedicado de la aplicación, como por ejemplo "/data/data/blanco.prefs.test/blanco.prefs.test_preferences.xml" estas preferencias pueden ser retraídas por medio de llaves "keys" y el objeto PreferenceManager. Si quisiéramos retraer un valor desde este objeto tendríamos que invocar un código parecido a este:

 PreferenceManager.getDefaultSharedPreferences(Context).getXXXX(LLAVE,VALOR_POR_DEFECTO)

Donde XXXX es el tipo de preferencia que queremos obtener por ejemplo String, Long, Boolean; LLAVE se refiere al nombre de la preferencia que queremos retraer, por ejemplo "habilitar_sonido"; y VALOR_POR_DEFECTO es el valor que sera obtenido si la llave no se encuentra dentro de nuestras preferencias, este valor debe de ser del mismo tipo que el especificado por la funcion en XXXX. 

Un ejemplo mas concreto. Si tubiera un archivo de preferencias como el que se muestra a continuación:
y quisiera retraer la propiedad text desde mi Activity principal, tendría que invocar el siguiente metodo


 PreferenceManager.getDefaultSharedPreferences(this).getString("text","");

y para guardar una preferencia tendría que invocar al editor de estas preferencias, una vez que se tenga el editor se pueden establecer todas las preferencias que se necesiten y después salvarlas al archivo XML. El código que se muestra a continuación  hace esa tarea.


Para controlar las preferencias del usuario en nuestra aplicación, necesitaríamos escribir una actividad que retraiga las preferencias, las vincule con algún control visual como un CheckBox, un EditView o algún otro y cada vez que el usuario cambie el estado de este control guardar el nuevo estado de la preferencia. Ahora imaginen que tienen 50 preferencias de usuario en la aplicación diferentes, esto se puede llegar a tornar un poco complicado, definir el Layout y el código para realizar todas estas tareas se torna tedioso y aburrido. Por suerte la gente de Android se preocupa por nosotros los desarrolladores y nos trae herramientas muy útiles, en la plataforma existe una actividad especial que se llama PreferenceActivity cuyo propósito es desplegar y guardar preferencias del usuario. Ademas esta actividad puede ser poblada de una manera especial para desplegar preferencias que han sido definidas en un archivo XML especial de recursos, la actividad se encargara de crear el Layout, Vistas y demás código para retraer y guardar los valores ademas de que podemos presentar una vista estándar similar a las desplegadas en el sistema y no desconcertar al usuario.
Este archivo especial que menciono se crea dentro del folder de recursos bajo la carpeta xml, en nuestro ejemplo tendremos que crear un archivo que se llame "res/xml/prefs.xml", bajo este archivo necesitamos crear un elemento raíz de tipo PreferenceScreen y debajo podemos crear Categorías, Preferencias de Checkbox, Preferencias seleccionables entre una lista, que sean introducidas por el usuario, selección entre tonos del teléfono o incluso una nueva pantalla que nos lleve a mas grupos de preferencias, etc., etc, etc. Este archivo se puede tornar tan complejo como sea necesario y la actividad se encargara de administrar todo lo necesario para que las preferencias se muestren y guarden perfectamente.
En ejemplo de la vida real tendríamos un archivo XML parecido a esto:

y nuestra Actividad de preferencias se definiría de esta manera:


Como pueden ver lo único que se necesita especificar es que la actividad cargue las preferencias desde el archivo XML que especificamos y eso es todo, la clase se encarga de crear las vistas y layouts necesarios así como el código para retraer y guardar las preferencias de usuario. Esta es una manera sencilla y rápida de manejar una opción tan importante como son las configuraciones de las aplicaciones. Espero y el articulo les haya servido, a continuación les dejo screenshots de como se ve la aplicación de ejemplo que realice.
Saludos a todos





No hay comentarios:

Publicar un comentario