Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Android / SharedPreferences: Preferencias de Usuario

SharedPreferences: Preferencias de Usuario

Autor jc mouse martes, enero 16, 2018

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:

  • Nombre: Preferencias de Usuario
  • Plantilla: Empty Activity
  • Activity Name: MainActivity
  • Layout Name: activity_main
  • Permisos: No se requiere
  • Dependencias: Ninguna
  • SDK mínimo: Api 16: Android 4.1

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:

share android

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:

  • CheckBoxPreference. Cuadro de texto para habilitar/deshabilitar opciones, es de tipo booleano
  • EditTextPreference. Es una caja de texto que permite introducir valores por teclado
  • ListPreference. Control que muestra una lista de valores donde solo puede seleccionarse una opción
  • MultiSelectListPreference. Similar al anterior, pero este permite seleccionar más de un valor

EditTextPreference

caja texto preferencia

CheckBoxPreference

checkbox preferencia

ListPreference

lista de valores

Los arrays entries como entryValues se declaran en el archivo string.xml de la carpeta values

String XML

MultiSelectListPreference

selección multiple

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:

divisor de preferencias

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:

Preferencias de Usuario

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

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! :)

También Te Podría Interesar

Compartir conexión de base de datos

Compartir conexión de base de datos

Cuando utilizamos aplicaciones web con conexión a base de datos MYSQL, se suele crear una clase que gestione la interacc...

JCPanel 3.0

JCPanel 3.0

Nueva versión de un viejo proyecto swing “JCMousePanel” que nos permitía agregar imágenes en los contenedore...

Instalación de Netbeans en Ubuntu

Instalación de Netbeans en Ubuntu

Netbeans es uno de los entornos de desarrollo integrado (Integrated Development Environment – IDE)  más conocidos...

Cifrado francmasón PigPen

Cifrado francmasón PigPen

El cifrado francmasón es un cifrado por sustitución simple que cambia las letras por símbolos. Sin embargo, el uso de sí...

Primeros pasos en Jaspersoft Studio

Primeros pasos en Jaspersoft Studio

¿Que es Jaspersoft Studio? Jaspersoft Studio es el nuevo diseñador de informes basado en Eclipse para JasperReports y Ja...

Crea App multilenguaje con Android Studio

Crea App multilenguaje con Android Studio

En este post aprenderemos los pasos básicos para construir una aplicación android con soporte multilenguaje, utilizaremo...

Comparte lo que sabes

Categorias

Últimas entradas

Netbeans es uno de los entornos de desarrollo integrado (Integrated Development Environment – IDE)  más conocidos...

Geany es un editor de texto para Sistemas Operativos Linux, windows y MAC que utiliza el kit de herramientas GTK+ con ca...

En este post te hablaremos sobre una interesante herramienta para le lectura y edición de metadatos que no te debe de fa...

Java cuenta con la clase java.lang.Math  la cual contiene métodos para realizar operaciones numéricas básicas como las f...

Android Bolivia

MAUS