Creando una pantalla de preferencias en Android
Últimamente ando más que liado. Estoy estudiando AppEngine para Java, haciendo un juego para Android y terminando mi proyecto también en Android. Este último lo tengo bastante avanzado y en estos días he estado trabajando en poner una pantalla de preferencias.
Una de las cosas que más me gusta de Android es que te facilita crear muchas de las cosas comunes que necesita una aplicación y para ello suele usar archivos XML. En el caso de las preferencias no iba a ser distinto y en pocos minutos te puedes crear tus preferencias.
Esto tiene dos ventajas:
- En poco minutos puedes hacer algo que tardarías horas en diseñar
- Las preferencias tienen un aspecto común en todas las aplicaciones de Android. Así un usuario que esté acostumbrado a usar el sistema estará familiarizado con la pantalla
Ahora vamos a por el código. Para realizar una pantalla de preferencias simplemente tienes que crear una nueva Actividad que herede de PreferenceActivity. Desde el método onCreate vamos a invocar un archivo XML que se encuentra en res/xml y que contiene la estructura, claves y objetos de nuestra pantalla de preferencias. El código sería el siguiente:
public class PreferencesFromXml extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
} Este código es uno de los ejemplos que viene con el SDK de Google y se encuentra aquí.
Una vez hecho esto simplemente tendremos que rellenar nuestro archivo XML. Para ello lo mejor es fijarse en este ejemplo de Google donde se pueden ver como crear grupos de preferencias, listas, checkbox, etc.
Una vez hecho esto nos queda acceder a los contenidos de las preferencias. Lo mejor es que no nos tenemos que preocupar en ningún momento de almacenar la información en ningún lado, de esto se encarga Android.
Lo primero es poner bien todos los "key" en el XML. Cada objeto tiene un atributo llamado "android:key" que nos servirá para poder acceder a él cuando sea necesario.
Para poder trabajar con las preferencias necesitamos un objeto de tipo SharedPreferences que podemos obtener en nuestra actividad de la siguiente forma:
PreferenceManager.setDefaultValues(this, R.xml.prefer, false);
SharedPreferences p =
PreferenceManager.getDefaultSharedPreferences(this);
p.getString("key", "value_default")
Lo primero que tenemos que poner es como "preferencias por defecto" de nuestra actividad el archivo XML que contiene las preferencias. Luego podremos acceder a las preferencias mediante el "key" y los métodos que nos ofrece el objeto SharedPreferences.
Una forma muy cómda de trabajar y fácil de usar. A continuación una imagen de como están quedando las preferencias de mi programa:

También te puede interesar
Comentarios
¿Este manual sirve para la SDK 1.5? Es que al ejecutarlo me lanza errores y no aparece nada.
Gracias, un saludo.
Dime los errores y espero poder ayudarte
Saludos
import android.os.Bundle;
import android.preference.PreferenceActivity;
public class config extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.layout.config);
}
}
Y el fichero config.xml es idéntico al siguiente:
http://developer.android.com/guide/samples/ApiDemos/res/xml/preferences.html
También he añadido los string a strings.xml
Al ejecutar el primer error que aparece en el DDMS es:
Uncaught handler: thread main exiting due to uncaught exception
Despues aparecen muchísimos más errores.
Alguna idea, gracias por la rápida respuesta.
¿Has metido el config en el Manifest? Supongo que si, pero por preguntar
Yo crearía un nuevo XML con un par de preferencias. También crearía una ventana principal con un botón que abriera las preferencias.
Realmente no se, pero por hacer pruebas
Yo no tuve problemas. Siento no poder ayudarte más
La clase sí está en el Manifest, lo que me parece extraño es que cuando quiero ver el config.xml en forma layout desde el Eclipse me aparece:
ClassNotFoundException: null
El Manifest es el siguiente:
android:versionName="1.0">
Si se le ocurre algo bien, sino pues muchas gracias igualmente.
Tienes que tener algún parámetro mal en el XML. Intenta cambiarlo que por ahí tienen que ir los tiros seguramente
Create uno nuevo
Suerte!!
Y me sigue diciendo que no encuentra la clase.
Por lo visto el fichero config.xml no puede estar dentro de la carpeta layout sino que me he creado otra llamada xml y dentro de ella sí que me aparece mi configuración.
Muchas gracias Javier.
Bueno... ya está hecho. ;-)
¿Cómo puedo acceder a los elementos del vector de las preferencias?
config.xml
android:entries="@array/entries_listaRutas" android:entryValues="@array/entryvalues_listaRutas"
android:dialogTitle="@string/dialog_title_listaRutas" />
Por ejemplo acceder a los valores del vector @array/entryvalues_listaRutas
Según el manual puedo obtener los valores de las preferencias, pero en el caso de un vector ¿sabes como es?
Muchas gracias, un saludo.
Me sale como si la web a la que apuntan los links que has puesto en el tutorial ya no existieran.
Me puedes decir donde los encuentro o actualizar los links.
Gracuias!
He copiado el ejemplo de google y lo tengo en un menu, me gustaria que cuando me presionen sobre el item del menu se mostrara el menu de opciones, como lo hago?
Gracias.
El blog de Javielinux


Tratare de crear mi menu de configuracion