¿Cómo implementar la pantalla de configuración de preferencias en Android?

En muchas aplicaciones, hemos visto la pantalla de Configuración, que es la más común en la mayoría de las aplicaciones. Esta pantalla de configuración se utiliza para gestionar las preferencias de los usuarios. Para crear esta pantalla de configuración, Android proporciona una función para crear una pantalla de preferencias de configuración. En este artículo, echaremos un vistazo a la implementación de la pantalla de configuración de preferencias en Android. 

¿Qué vamos a construir en este artículo? 

Construiremos una aplicación simple en la que mostraremos un botón simple y al hacer clic en ese botón abriremos una pantalla de configuración que crearemos usando las preferencias de configuración. Esta pantalla de configuración se verá similar a lo que podemos llegar a ver en la configuración de YouTube en la opción General. qué

Implementación paso a paso

Paso 1: crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo  activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    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"
    tools:context=".MainActivity">
 
    <!--button for opening settings activity-->
    <Button
        android:id="@+id/idBtnSettings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Settings"
        android:textAllCaps="false" />
 
</RelativeLayout>

Paso 3: Creación de una nueva actividad para mostrar la pantalla de configuración

Vaya a la aplicación > java > el nombre del paquete de su aplicación > haga clic con el botón derecho en él > Nuevo > Actividad y seleccione Actividad vacía y asígnele el nombre SettingsActivity .

Paso 4: trabajar con el archivo MainActivity.java 

Vaya al archivo MainActivity.java y consulte el siguiente código. A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
 
import androidx.appcompat.app.AppCompatActivity;
 
public class MainActivity extends AppCompatActivity {
   
    // creating a variable for our button.
    private Button settingsBtn;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        // initializing our button.
        settingsBtn = findViewById(R.id.idBtnSettings);
         
        // adding on click listener for our button.
        settingsBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // opening a new intent to open settings activity.
                Intent i = new Intent(MainActivity.this, SettingsActivity.class);
                startActivity(i);
            }
        });
    }
}

Paso 5: Creación de un archivo de preferencias para mostrar nuestra configuración

Navegue a la aplicación> res> Haga clic con el botón derecho en él> Nuevo> Archivo de recursos de Android y verá la pantalla a continuación. 

Paso 6: agregue el siguiente código en el archivo strings.xml

Vaya a la aplicación > res > valores > archivo strings.xml y agréguele el siguiente código. 

XML

<resources>
    <string name="app_name">GFG App</string>
    <string name="remind_to_take_a_break">Remind me to take a break</string>
    <string name="key_upload_quality">key_upload_quality</string>
    <string name="remind_me">Remind me to take a break</string>
    <string name="remind_me_for_bed_time">remind_me_for_bed_time</string>
    <string name="remind_for_bed_time">Remind me for bed time</string>
    <string name="limit_data_usage">prefs_limit_data_usage</string>
    <string name="stream_video">Only stream HD video on Wi-Fi</string>
    <string name="limit_mobile_usage">Limit mobile data usage</string>
    <string name="double_tap_to_seek">Double-tap to seek</string>
    <string name="pref_seek_val">pref_seek_val</string>
    <string name="seconds">seconds</string>
    <string name="uploads">Uploads</string>
    <string name="pref_uploads">pref_uploads</string>
    <string name="specify_network_prefs">Specify network preferences for uploads</string>
    <string name="prefs_restricted_mode">prefs_restricted_mode</string>
    <string name="restricated_mode">Restricted Mode can help to hide videos with potentially mature content.No filter is 100% accurate, but it should help you to avoid most of this type of content.</string>
    <string name="restricated_mode_description">Restricted Mode</string>
    <string name="prefs_enable_stats">prefs_enable_stats</string>
    <string name="enable_stats">Enable stats for nerds</string>
 
    <string-array name="pref_upload_quality_entries">
        <item>360p</item>
        <item>480p</item>
        <item>720p</item>
        <item>1080p</item>
        <item>Original</item>
    </string-array>
 
    <string-array name="pref_remind_me_to_take_a_break">
        <item>1 hours</item>
        <item>2 hours</item>
        <item>3 hours</item>
        <item>5 hours</item>
        <item>10 hours</item>
    </string-array>
 
    <string-array name="pref_seek_values">
        <item>5</item>
        <item>10</item>
        <item>15</item>
        <item>20</item>
        <item>30</item>
    </string-array>
     
    <string-array name="pref_duration">
        <item>0</item>
        <item>1</item>
        <item>2</item>
        <item>3</item>
        <item>4</item>
    </string-array>
 
    <string-array name="pref_uploads">
        <item>Only when on Wi-Fi</item>
        <item>On any network</item>
    </string-array>
 
</resources>

Paso 7: trabajar con el archivo preferencias.xml

En preferencias existen diferentes tipos de preferencias las cuales se enumeran a continuación: 

  • EditTextPreference : esto se usa para obtener el texto del usuario.
  • ListPreference : esta opción se utiliza para mostrar un cuadro de diálogo con la lista de opciones para elegir.
  • CheckBoxPreference : esta opción se usa para mostrar una casilla de verificación para alternar una configuración.
  • SwitchPreference : esta opción se utiliza para encender y apagar el interruptor.
  • RingtonePreference : esta opción se utiliza para abrir la página de tono de llamada de su dispositivo.
  • Preferencia con una acción de intención android.intent.action.VIEW: para abrir un navegador externo navegando a una URL.

Vaya a la aplicación > res > xml > archivo preferencias.xml y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle.

XML

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
     
    <!--below line is to create preference category-->
    <PreferenceCategory android:title="General">
 
        <!--in below line we are creating a list preference
            and we are adding default selected value in list for 3 rd index-->
        <!--dialog title is to set title for our dialog box
            entries is used to add list of data which we
            are adding from our strings file
            entry values is to add values to our entries.
            key is use to add key to our list preferences
            summary is use to add description to our option
            title is use to add title to our list preferences.-->
        <!--this list preference is for remind me option-->
        <ListPreference
            android:defaultValue="3"
            android:dialogTitle="@string/remind_to_take_a_break"
            android:entries="@array/pref_remind_me_to_take_a_break"
            android:entryValues="@array/pref_duration"
            android:key="@string/key_upload_quality"
            android:summary="@string/remind_me"
            android:title="@string/remind_me" />
 
        <!--on below line we are creating a switch preference
            default value is use to set switch on or off
            key is use to set key
            title is use to add title to our switch-->
        <!--this switch preference option is to remind for a bed time-->
        <SwitchPreference
            android:defaultValue="false"
            android:key="@string/remind_me_for_bed_time"
            android:title="@string/remind_for_bed_time" />
 
        <!--below switch preference is
            use for mobile data usage-->
        <SwitchPreference
            android:defaultValue="false"
            android:key="@string/limit_data_usage"
            android:summary="@string/stream_video"
            android:title="@string/limit_mobile_usage" />
 
        <!--below list preference is use for
            double tap to seek option-->
        <ListPreference
            android:defaultValue="1"
            android:dialogTitle="@string/double_tap_to_seek"
            android:entries="@array/pref_seek_values"
            android:entryValues="@array/pref_duration"
            android:key="@string/pref_seek_val"
            android:summary="@string/seconds"
            android:title="@string/double_tap_to_seek" />
 
        <!--below option is use to create a list
            preference for Upload preferences-->
        <ListPreference
            android:defaultValue="1"
            android:dialogTitle="@string/uploads"
            android:entries="@array/pref_uploads"
            android:entryValues="@array/pref_duration"
            android:key="@string/pref_uploads"
            android:summary="@string/specify_network_prefs"
            android:title="Uploads" />
 
        <!--below switch preferences is use to restrict mode-->
        <SwitchPreference
            android:defaultValue="false"
            android:key="@string/prefs_restricted_mode"
            android:summary="@string/restricated_mode"
            android:title="@string/restricated_mode_description" />
 
        <!--below switch pref is use for enable stats option-->
        <SwitchPreference
            android:defaultValue="false"
            android:key="@string/prefs_enable_stats"
            android:title="@string/enable_stats" />
 
    </PreferenceCategory>
 
</PreferenceScreen>

Paso 8: ahora cree una nueva clase Java para mostrar nuestro fragmento de preferencia

Vaya a la aplicación > java > el nombre del paquete de su aplicación > haga clic con el botón derecho en él > Nuevo > clase Java y asígnele el nombre Fragmento de configuración y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle. 

Java

import android.os.Bundle;
import android.preference.PreferenceFragment;
 
import androidx.annotation.Nullable;
 
public class SettingsFragment extends PreferenceFragment {
 
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         
        // below line is used to add preference
        // fragment from our xml folder.
        addPreferencesFromResource(R.xml.preferences);
    }
}

Paso 9: trabajar con el archivo activity_settings.xml

Navegue hasta el archivo activity_settings.xml y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    tools:context=".SettingsActivity">
 
    <!--frame layout for displaying
        our preference fragment-->
    <FrameLayout
        android:id="@+id/idFrameLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
 
</androidx.constraintlayout.widget.ConstraintLayout>

Paso 10: trabajar con el archivo SettingsActivity.java

Vaya a la aplicación > java > el nombre del paquete de su aplicación > el archivo SettingsActivity.java y agréguele el siguiente código. Se agregan comentarios en el código para conocer con más detalle. 

Java

import android.os.Bundle;
 
import androidx.appcompat.app.AppCompatActivity;
 
public class SettingsActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
         
        // below line is to change
        // the title of our action bar.
        getSupportActionBar().setTitle("Settings");
         
        // below line is used to check if
        // frame layout is empty or not.
        if (findViewById(R.id.idFrameLayout) != null) {
            if (savedInstanceState != null) {
                return;
            }
            // below line is to inflate our fragment.
            getFragmentManager().beginTransaction().add(R.id.idFrameLayout, new SettingsFragment()).commit();
        }
    }
}

Ahora ejecute su aplicación y vea el resultado de la aplicación. 

Producción:

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *