miércoles, 22 de mayo de 2013

Como crear una pantalla de preferencias (PrefenrenceActivity)

Es bastante común tener que crear en nuestra aplicación una pantalla de preferencias para que el usuario pueda configurar ciertos parámetros de la aplicación. Lo primero que se nos puede venir a la mente es crear un layout desde cero para poder cargar y guardar las configuraciones que deseemos, pero Google ha ideado un sistema bastante sencillo con el que poder crear una pantalla de configuración básica en pocos minutos.

Si nos fijamos en una pantalla cualquiera de configuración de Android nos puede venir a la mente algo parecido a lo siguiente:



En estas pantallas normalmente suelen aparecer checkbox, listas de selección, un texto editable...crear una pantalla de este tipo es bastante sencillo.

Una pantalla de preferencias está compuesta principalmente de dos componentes:
  • xml que contendrá la definición de la pantalla de configuración 
  • Actividad que herede de PreferenceActivity
En primer lugar vamos a crear un nuevo xml llamado preferencias.xml y lo situaremos dentro de /res/xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="preferencias_principal" >
   <PreferenceCategory android:title="Categoría 1">
     <CheckBoxPreference
          android:key="activo"
          android:summary="Subtitulo de la propiedad"
          android:title="Título de la propiedad" />
   </PreferenceCategory>
    <ListPreference
        android:defaultValue="1"
        android:entries="@arrays/descripciones"
        android:entryValues="@arrays/valores"
        android:key="lista"
        android:summary="Título de la propiedad"
        android:title="Subtitulo de la propiedad" />
 
    <EditTextPreference
        android:defaultValue="texto por defecto"
        android:key="texto"
        android:summary="Título de la propiedad"
        android:title="Subtitulo de la propiedad" />
</PreferenceScreen>

Vamos a analizar el xml para explicar los distintos tipos de propiedades que hemos añadido.

A nivel de estructura general podemos ver que todas las etiquetas deben estar dentro de una etiqueta <PreferenceScreen>

La siguiente etiqueta que nos encontramos es <PreferenceCategory> la cual nos permitirá agrupar una o varias propiedades poniendo un título a esta. En la imagen de ejemplo del principio del post podemos ver una (Personalización)

Vamos ya con las etiquetas de propiedades, la primera de ellas es <CheckBoxPreference> la cual nos mostrará un CheckBox el cual podremos marcar o desmarcar. Esta etiqueta tiene varios atributos que son comunes para todas las etiquetas, como son key (clave con la que se guardará el valor), title (texto principal de la propiedad) y summary (texto secundario, aparece debajo del título y con menor tamaño)

La segunda de las etiquetas que vamos a analizar es <ListPreference>. Esta etiqueta nos mostrará al pulsarla una lista de elementos para que podamos seleccionar uno de ellos.
Aparte de los atributos comunes antes explicados esta etiqueta añade dos propiedades muy importantes, que son "entries" y "entryValues". En la primera deberemos indicar un array con la lista de los literales de los elementos que componen el listado, mientras que en el segundo, debemos añadir la lista de valores asociados a estos.

El array debemos crearlo en un fichero xml que podemos situarlo en /res/values/arrays.xml
Dicho xml podría ser algo así:

<resources>
    <string-array name="descripciones">
      <item>Elemento A</item>
      <item>Elemento B</item>
      <item>Elemento C</item>
    </string-array>
    <string-array name="valores">
      <item>0</item>
      <item>1</item>
      <item>2</item>
    </string-array>
</resources>

Lo último que deberemos hacer es crear una actividad que controle la pantalla de preferencias. Esta actividad deberá extender de PreferenceActivity y añadir el xml que contiene la definición de la pantalla de propiedades.

public class Preferencias extends PreferenceActivity {

    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.preferencias);
    }
}

Ya solo quedaría dar de alta la actividad como normalmente hacemos en el fichero AndroidManifest.xml.

Espero que os haya servido de ayuda.

No hay comentarios:

Publicar un comentario