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
build.gradle (del módulo)
buildFeatures {
viewBinding = true
}
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 {
lateinit private var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// val boton = findViewById<View>(R.id.button1) as Button
// boton.setOnClickListener(this)
binding.button1.setOnClickListener(this)
}
override fun onClick(v: View) {
if (v == binding.button1)
abrirActividadPreferencias()
}
fun abrirActividadPreferencias() {
val intentAbrir = Intent(this, ActividadPreferences::class.java)
startActivity(intentAbrir)
}
}
Ejemplo: SharedPreferences en Kotlin
Android Shared Preferences Example Tutorial
Crear un nuevo proyecto en Kotlin llamado SharedPreferencesKotlin
build.gradle (del módulo)
buildFeatures {
viewBinding = true
}
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">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="220dp" />
<EditText
android:id="@+id/etName"
android:layout_width="237dp"
android:layout_height="65dp"
android:layout_marginStart="56dp"
android:layout_marginTop="27dp"
android:layout_marginBottom="111dp"
android:ems="10"
android:inputType="text"
android:text="Name"
app:layout_constraintBottom_toTopOf="@+id/guideline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/etEmail"
android:layout_width="291dp"
android:layout_height="65dp"
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="20dp"
android:layout_marginTop="4dp"
android:onClick="Save"
android:text="Save"
app:layout_constraintStart_toEndOf="@+id/buttonGet"
app:layout_constraintTop_toTopOf="@+id/guideline" />
<Button
android:id="@+id/buttonGet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="36dp"
android:layout_marginTop="4dp"
android:onClick="Get"
android:text="Get"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline" />
<Button
android:id="@+id/buttonClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="4dp"
android:onClick="clear"
android:text="Clear"
app:layout_constraintStart_toEndOf="@+id/buttonSave"
app:layout_constraintTop_toTopOf="@+id/guideline" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
class MainActivity : Activity() {
lateinit private var binding: ActivityMainBinding
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)
// activity_main.xml -> ActivityMainBinding
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 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)) {
binding.etName.setText(sharedpreferences.getString(Name, ""))
}
if (sharedpreferences.contains(Email)) {
binding.etEmail .setText(sharedpreferences.getString(Email, ""))
}
}
fun Save(view: View) {
val n = binding.etName.text.toString()
val e = binding.etEmail.text.toString()
val editor = sharedpreferences.edit()
editor.putString(Name, n)
editor.putString(Email, e)
//editor.commit()
editor.apply()
}
fun clear(view: View) {
binding.etName.setText("")
binding.etEmail.setText("")
}
fun Get(view: View) {
// sharedpreferences = getSharedPreferences(mypreference, MODE_PRIVATE)
if (sharedpreferences.contains(Name)) {
binding.etName.setText(sharedpreferences.getString(Name, ""))
}
if (sharedpreferences.contains(Email)) {
binding.etEmail.setText(sharedpreferences.getString(Email, ""))
}
}
}
Código de SharedPreferencesKotlin
Tarea online: Conversión € / $
Más información:
Persistencia de datos con Shared Preferences
Android fundamentals 09.2: App settings
Código de DroidCafeWithSettings


Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.