Ir al contenido principal

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.

Comentarios

Entradas populares de este blog

Spring AI: First application

¡Hola! 👋 Si estás aquí, seguramente te pica la curiosidad sobre cómo integrar Inteligencia Artificial en tus aplicaciones Java sin complicarte la vida. Spring AI ha llegado para facilitarnos enormemente esta tarea, ofreciendo una abstracción unificada para interactuar con modelos como OpenAI, Azure, o incluso modelos locales con Ollama. En este tutorial,  vamos a crear juntos  un ejemplo muy sencillo: un endpoint REST que te permitirá charlar con una IA. ¡Verás que con muy pocas líneas de código tienes algo funcionando! ¿Qué necesitamos antes de empezar? Para seguir este tutorial sin problemas, asegúrate de tener a mano: Java 17  o superior (Spring Boot 3 lo requiere). Tu IDE favorito (IntelliJ, Eclipse, VS Code...). Una  API Key de OpenAI  (puedes conseguirla en  platform.openai.com ). Si prefieres no gastar créditos, al final te cuento cómo hacerlo gratis con Ollama. 1. Creando los cimientos del proyecto Lo más rápido es ir a  start.spring.io  ...

Android Studio, el nuevo entorno de desarrollo (I/O 2013)

Una de las novedades que nos ha dejado la conferencia Google I/0 2013 ha sido la publicación de un nuevo entorno de desarrollo que pasará a sustituir a Eclipse + SDK + ADT . El nuevo entorno pretende simplificar el desarrollo de aplicaciones, estando todo mucho más integrado y pensado para desarrollar específicamente para Android. Android Studio está basado en  IntelliJ IDEA (El cual para muchos desarrolladores está considerado el mejor IDE del mercado). El principal objetivo es hacerlo todo más usable y orientado a la programación en Android, por lo que para ello se han incluido nuevas refactorizaciones y quick fixes (soluciones rapidas) para corregir errores comunes, así como recomendaciones varias. Se ha incluido un nuevo editor gráfico mucho más potente (basado en drag-and-drop) que mejorará la experiencia y la edición de las pantallas (dicho sea de paso, el que teníamos hasta ahora era bastante mejorable). Este nuevo editor nos dará una vista previa más real del resul...

Instalación Android Studio

En la anterior entrada de Droide Code hacíamos una breve descripción de  Android Studio , el nuevo entorno de desarrollo de Google para Android. En el analizábamos las novedades que anunciaba Google sobre este nuevo IDE. Hoy mismo lo he instalado no sin algún que otro problema que paso a describir: Descargar el ejecutable del sitio oficial de  Android developer . El instalador está disponible para Windows, Linux y Mac Una vez tengamos el instalador y dependiendo de nuestro sistema operativo deberemos instalarlo al igual que cualquier otra aplicación. Una vez instalado tuve un pequeño problema a intentar ejecutarlo, ya que pulsaba sobre el ejecutable y no ocurría nada. Esto se debía a que en el pc en el que instalé la aplicación no tenía configurada la variable de entorno JAVA_HOME y no mostraba ningún mensaje que describiera dicho error. Para aseguraros de que es esto lo que os está ocurriendo podéis intentar...