Shared preferences

Manejo de preferencias

Shared Preferences

Gestión de datos (1. Preferencias en la Plataforma Moodle)

Ejemplo: GamePreferences

Crear un nuevo proyecto en Kotlin llamado PreferenciasKotlin

fichero res/values/dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>

</resources>

fichero res/values/strings.xml

<resources>
    <string name="app_name">Preferencias</string>
    <string name="ejemplo">Ejemplo de Preferencias utilizando la clase PreferenceFragment</string>
    <string name="boton">Preferencias</string>
</resources>

fichero res/values/codigovelocidad.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
   <string-array name="velocidad">
      <item>Lento</item>
      <item>Medio</item>
      <item>Rápido</item>
   </string-array>
   <string-array name="codigovelocidad">
      <item>1</item>
      <item>2</item>
      <item>3</item>
   </string-array>
</resources>

fichero res/xml/preferencias.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
    <PreferenceCategory android:title="Datos personales">
        <EditTextPreference
            android:key="nombre"
            android:title="Nombre del usuario"
            android:summary="Introduce aquí tu nombre"
            android:dialogTitle="Nombre" />
    </PreferenceCategory>
    <PreferenceCategory android:title="Efecto de la bola">
        <CheckBoxPreference
            android:key="rebote"
            android:title="Rebote"
            android:summary="La bola rebotará en la pantalla" />
        <ListPreference
            android:key="velocidad"
            android:title="Velocidad"
            android:summary="Selecciona la velocidad de la bola"
            android:dialogTitle="Elige velocidad:"
            android:entries="@array/velocidad"
            android:entryValues="@array/codigovelocidad" />
    </PreferenceCategory>   
</PreferenceScreen>

activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/ejemplo"
        android:textSize="32sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.332" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="@string/boton"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView1" />

</androidx.constraintlayout.widget.ConstraintLayout>

MiFragmentoPref.kt

class MiFragmentoPref : PreferenceFragment() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        addPreferencesFromResource(R.xml.preferencias)
    }
}

ActividadPreferences.kt

class ActividadPreferences : Activity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        fragmentManager.beginTransaction()
            .replace(R.id.content, MiFragmentoPref())
            .commit()
    }
}

Declarar la actividad en el manifiesto

<activity
    android:name=".ActividadPreferences"
    android:exported="false" />

MainActivity.kt

class MainActivity : Activity(), View.OnClickListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val boton = findViewById<View>(R.id.button1) as Button
        boton.setOnClickListener(this)
    }

    override fun onClick(v: View) {
        abrirActividadPreferencias()
    }

    fun abrirActividadPreferencias() {
        val intentAbrir = Intent(this, ActividadPreferences::class.java)
        startActivity(intentAbrir)
    }
}

Código de PreferenciasKotlin

 

Ejemplo: SharedPreferences en Kotlin

Android Shared Preferences Example Tutorial

Crear un nuevo proyecto en Kotlin llamado SharedPreferencesKotlin

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/etName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="49dp"
        android:layout_marginTop="27dp"
        android:ems="10"
        android:inputType="text"
        android:text="Name"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/etEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="1dp"
        android:layout_marginTop="23dp"
        android:ems="10"
        android:inputType="text"
        android:text="Email"
        app:layout_constraintStart_toStartOf="@+id/etName"
        app:layout_constraintTop_toBottomOf="@+id/etName" />

    <Button
        android:id="@+id/buttonSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="18dp"
        android:text="Save"
        android:onClick="Save"
        app:layout_constraintBaseline_toBaselineOf="@+id/buttonGet"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/buttonGet"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="31dp"
        android:layout_marginEnd="22dp"
        android:text="Get"
        android:onClick="Get"
        app:layout_constraintEnd_toEndOf="@+id/etEmail"
        app:layout_constraintTop_toBottomOf="@+id/etEmail" />

    <Button
        android:id="@+id/buttonClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="13dp"
        android:text="Clear"
        android:onClick="clear"
        app:layout_constraintBaseline_toBaselineOf="@+id/buttonGet"
        app:layout_constraintStart_toEndOf="@+id/etEmail" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt

class MainActivity : Activity() {
    lateinit var sharedpreferences: SharedPreferences
    lateinit var name: EditText
    lateinit var email: EditText

    companion object {
        const val mypreference = "mypref"
        const val Name = "nameKey"
        const val Email = "emailKey"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        name = findViewById<View>(R.id.etName) as EditText
        email = findViewById<View>(R.id.etEmail) as EditText

        sharedpreferences = getSharedPreferences(mypreference, MODE_PRIVATE)

        if (sharedpreferences.contains(Name)) {
            name.setText(sharedpreferences.getString(Name, ""))
        }
        if (sharedpreferences.contains(Email)) {
            email.setText(sharedpreferences.getString(Email, ""))
        }
    }

    fun Save(view: View) {
        val n = name.text.toString()
        val e = email.text.toString()
        val editor = sharedpreferences.edit()
        editor.putString(Name, n)
        editor.putString(Email, e)
        editor.commit()
    }

    fun clear(view: View) {
        name.setText("")
        email.setText("")
    }

    fun Get(view: View) {
        sharedpreferences = getSharedPreferences(mypreference, MODE_PRIVATE)
        if (sharedpreferences.contains(Name)) {
            name!!.setText(sharedpreferences.getString(Name, ""))
        }
        if (sharedpreferences.contains(Email)) {
            email!!.setText(sharedpreferences.getString(Email, ""))
        }
    }
}

Código de SharedPreferencesKotlin

 

Tarea online: Conversión € / $

 

Más información:

Android fundamentals 09.2: App settings

Código de DroidCafeWithSettings

Shared Preferences: Getting Started

Código de SharedPrefs ToDo

Cómo Crear Una Actividad De Preferencias En Android

Deja una respuesta