En este post construiremos paso a paso un SharedPreferences más conocido en español como «Preferencias de Usuario«, estas preferencias son opciones que el usuario puede cambiar a su conveniencia para personalizar la aplicación de distintas maneras, es decir, desde cambiar tipo y color de fuente hasta opciones más avanzadas como activar o desactivar módulos completos de una programa.
Paso 1: El proyecto Android
Partimos de un proyecto base de android con las siguientes características:
Paso 2: Estructura del proyecto
Crearemos una clase que llamaremos como «PreferenciaFragment«, a continuación creamos una nueva Activity con el nombre de «PreferenciaActivity«, importante, sin layout.
En la carpeta «res«, creamos una nueva carpeta llamada «xml» y dentro de ella agregamos un nuevo recursos XML (new -> XML resource file), el archivo se llamara «preferencias_de_usuario.xml«.
Finalmente, el archivo string.xml de la carpeta res>values, ya esta creado, pero lo mencionamos porque lo utilizaremos más adelante.
Debes tener algo como esto:
Paso 3: Archivo XML de preferencias
Este archivo contiene las diferentes opciones de las que dispondrá la interfaz de Preferencias de Usuario, existen 4 tipos de controles con los que podemos trabajar, estos son:
EditTextPreference
CheckBoxPreference
ListPreference
Los arrays entries como entryValues se declaran en el archivo string.xml de la carpeta values
MultiSelectListPreference
De igual forma los arrays se declaran en el archivo string.xml
Es posible también dividir las preferencias de usuario por categorías, para ello se utiliza la etiqueta PreferenceCategory, es decir:
Dicho esto, abrimos el archivo string.xml y reemplazamos con el siguiente código:
<resources> <string name="app_name">Preferencias de Usuario</string> <!-- ListPreference: entries --> <string-array name="pref_color_texto"> <item>default</item> <item>Rojo</item> <item>Amarillo</item> <item>Verde</item> </string-array> <!-- ListPreference: entryValues --> <string-array name="pref_color_texto_valores"> <item>#000000</item> <item>#ff0000</item> <item>#fbff00</item> <item>#00c70a</item> </string-array> <!-- MultiSelectListPreference: entry --> <string-array name="pref_libros"> <item>El Principito</item> <item>El Señor de los Anillos</item> <item>Juego de Tronos</item> </string-array> <!-- MultiSelectListPreference: entryValues --> <string-array name="pref_libros_autores"> <item>El Principito de Antoine de Saint-Exupéry</item> <item>EL señor de los anilos de J. R. R. Tolkien</item> <item>Juego de Tronos George R. R. Martin</item> </string-array> <!-- MultiSelectListPreference: entryValues --> <string-array name="defaultValue"> <!-- sin valores por default --> </string-array> </resources>
A continuación, pegamos el siguiente código en el archivo preferencias_de_usuario.xml de la carpeta XML
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <PreferenceCategory android:title="General" > <EditTextPreference android:title="Texto de Bienvenida" android:defaultValue="Hola Mundo!!!" android:summary="Texto que se muestra al inicio de la aplicación" android:key="prefTexto"/> <CheckBoxPreference android:defaultValue="false" android:key="prefNegrilla" android:summary="Estilo del texto" android:title="Texto en Negrilla"/> <ListPreference android:key="prefColorTexto" android:title="Color de texto" android:defaultValue="#1e1e1e" android:entries="@array/pref_color_texto" android:entryValues="@array/pref_color_texto_valores" android:summary="Para destacar el texto" /> </PreferenceCategory> <PreferenceCategory android:title="Mis libros favoritos" > <MultiSelectListPreference android:dialogTitle="Mis Libros" android:key="pref_mis_libros" android:summary="Libros y autores favoritos" android:title="Mis Libros" android:entries="@array/pref_libros" android:entryValues="@array/pref_libros_autores" android:defaultValue="@array/pref_libros_default"/> </PreferenceCategory> </PreferenceScreen>
Paso 4: PreferenciaFragment
Esta clase que se extiende de PreferenceFragment nos permite cargar el archivo xml de preferencias declarado en el paso 3
package org.example.preferenciasdeusuario; import android.os.Bundle; import android.preference.PreferenceFragment; public class PreferenciaFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); // Recurso XML addPreferencesFromResource(R.xml.preferencias_de_usuario); } }
Paso 5: PreferenciaActivity
Esta clase no permite cargar en una actividad el fragmento anterior
package org.example.preferenciasdeusuario; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class PreferenciaActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction() .replace(android.R.id.content, new PreferenciaFragment()) .commit(); }//onCreate:end }//PreferenciaActivity:end
Paso 6: Cargar Preferencias de Usuario y llamar a la actividad Preferencias
La interfaz consiste en un botón (button) para llamar a las preferencias de Usuario y un TextView para aplicar los cambios en las preferencias, el código XML es:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="org.example.preferenciasdeusuario.MainActivity"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Preferencias de Usuario" android:id="@+id/button"/> <TextView android:id="@+id/textview" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="24sp" android:text="Hello World!" /> </LinearLayout>
Finalmente, modificamos el archivo MainActivity de la siguiente manera:
package org.example.preferenciasdeusuario; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.graphics.Typeface; import android.preference.PreferenceManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.util.Set; public class MainActivity extends AppCompatActivity { private Button button; private TextView textview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //Controles button = ((Button)findViewById(R.id.button)); textview = (TextView) findViewById(R.id.textview); //Evento para llavar a la actividad Preferencias de Usuario button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent i = new Intent(MainActivity.this, PreferenciaActivity.class); startActivityForResult(i, 1); } }); //Carga las preferencias de usuario preferencias(); }//onCreate:end /** * Obtiene el resultado de los cmabios realizados en la actividad Prferencias de Usuario * */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==1) { preferencias(); } } /** * Lee las preferencias de usuario y realiza los cambios segun corresponda el caso * */ private void preferencias(){ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); //donde // getString(Valor guardado, valor por defecto) //Texto textview.setText(sharedPreferences.getString("prefTexto", "Hola Mundo!!!")); //color textview.setTextColor(Color.parseColor(sharedPreferences.getString("prefColorTexto", "#000000"))); //estilo textview.setTypeface(null, sharedPreferences.getBoolean("prefNegrilla", false) ? Typeface.BOLD : Typeface.NORMAL); //Seleccion multiple -> Mis libros favoritos Set<String> pref_libros = sharedPreferences.getStringSet("pref_mis_libros", null); if(pref_libros!=null && !pref_libros.isEmpty()){ StringBuilder stringBuilder = new StringBuilder(sharedPreferences.getString("prefTexto", "Hola Mundo!!!")); stringBuilder.append("\nLibros favoritos:"); for(String libro : pref_libros){ stringBuilder.append("\n - " + libro); } textview.setText(stringBuilder); } } }
Ejecutamos y tenemos:
enjoy!!!
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
Un esquema XSD se utiliza para describir y validar la estructura y contenido de los datos de un documento XML. Un esquem...
Netbeans es uno de los entornos de desarrollo integrado (Integrated Development Environment – IDE) más conocidos...
La siguiente clase reproduce sonidos WAV en controles Swing de Java Netbeans, los controles son pasados en el constructo...
En un post anterior se vio como agregar un código DataMatrix en reportes con iReport Designer sin embargo actualmente el...
En un post anterior [Crear plantillas personalizadas para Netbeans] vimos una forma sencilla que tiene Netbeans para fac...
Apache POI es la API de Java para el trabajo con archivos de Microsoft como son Word, Excel y Power Point. Apache POI se...
El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...
WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...
Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...
TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...