Impostazioni Parte di Android Jetpack.

Le impostazioni consentono agli utenti di modificare la funzionalità e il comportamento di un'app. Le impostazioni possono influisce sul comportamento in background, ad esempio la frequenza con cui l'app sincronizza i dati con cloud o che possono avere una copertura più ampia, come modificare i contenuti presentazione dell'interfaccia utente.

Per integrare le impostazioni configurabili dall'utente nella tua app, usa AndroidX Libreria delle preferenze. Questa libreria gestisce l'interfaccia utente e interagisce con spazio di archiviazione, in modo da definire solo le singole impostazioni che l'utente configurare. La libreria è dotata di un tema Material Design che offre un un'esperienza utente coerente su tutti i dispositivi e le versioni del sistema operativo.

Inizia

Una Preference è l'edificio di base del blocco note della libreria Preference. Una schermata delle impostazioni contiene un Preference gerarchia. Puoi definire questa gerarchia come risorsa XML oppure creare una gerarchia nel codice.

Le sezioni seguenti descrivono come creare una schermata di impostazioni semplice utilizzando il comando nella libreria di preferenze AndroidX.

Prima di iniziare, aggiungi la dipendenza Libreria delle preferenze a build.gradle file:

Alla moda

dependencies {
    implementation "androidx.preference:preference-ktx:1.2.0"
}

Kotlin

dependencies {
    implementation("androidx.preference:preference-ktx:1.2.0")
}

Dopo una sincronizzazione Gradle, puoi passare alla parte XML dell'attività.

Creare una gerarchia

Nel progetto, vai alla cartella res/xml, crea un file preferences.xml, e aggiungi il seguente codice:

<PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <SwitchPreferenceCompat
        app:key="notifications"
        app:title="Enable message notifications"/>

    <Preference
        app:key="feedback"
        app:title="Send feedback"
        app:summary="Report technical issues or suggest new features"/>

</PreferenceScreen>

Questa gerarchia contiene due oggetti Preference: un SwitchPreferenceCompat che consente agli utenti di attivare e disattivare un'impostazione e una Preference di base senza widget.

Quando crei una gerarchia, ogni Preference deve avere una chiave univoca.

Aumenta la gerarchia

Per aumentare la gerarchia da un attributo XML, crea un PreferenceFragmentCompat, eseguire l'override onCreatePreferences(), e fornisci la risorsa XML da gonfiare, come mostrato nell'esempio seguente:

Kotlin

class MySettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.preferences, rootKey)
    }
}

Java

public class MySettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
}

Potrai quindi aggiungere questo Fragment al tuo Activity come faresti con qualsiasi altro Fragment:

Kotlin

class MySettingsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
                .beginTransaction()
                .replace(R.id.settings_container, MySettingsFragment())
                .commit()
    }
}

Java

public class MySettingsActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.settings_container, new MySettingsFragment())
                .commit();
    }
}

Il risultato è mostrato nell'immagine seguente:

Immagine che mostra un esempio di schermata Preferenze
. Figura 1. Una schermata di impostazioni creata utilizzando due Preference di oggetti strutturati.

Monitora le preferenze

Puoi ricevere un evento quando una preferenza cambia registrando un listener per Questo:

Kotlin

findPreference<SwitchPreferenceCompat>("notifications")
    ?.setOnPreferenceChangeListener { _, newValue ->
        Log.d("Preferences", "Notifications enabled: $newValue")
        true // Return true if the event is handled.
    }

findPreference<Preference>("feedback")
    ?.setOnPreferenceClickListener {
        Log.d("Preferences", "Feedback was clicked")
        true // Return true if the click is handled.
    }

Java

SwitchPreferenceCompat notificationsPref = findPreference("notifications");

if (notificationsPref != null) {
    notificationsPref.setOnPreferenceChangeListener((preference, newValue) -> {
        Log.d("Preferences", String.format("Notifications enabled: %s", newValue));
        return true; // Return true if the event is handled.
    });
}

Preference feedbackPref = findPreference("feedback");

if (feedbackPref != null) {
    feedbackPref.setOnPreferenceClickListener((preference) -> {
        Log.d("Preferences", "Feedback was clicked");
        return true; // Return true if the event is handled.
    });
}

Leggi il valore della preferenza corrente

PreferenceFragmentCompat nasconde gran parte dei macchinari necessari per leggere le preferenze. Tuttavia, tutti i dati vengono memorizzati SharedPreferences e potrai leggere questi valori come fai normalmente con SharedPreferences:

Kotlin

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all

preferences.forEach {
    Log.d("Preferences", "${it.key} -> ${it.value}")
}

Java

var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll();

preferences.forEach((key, value) ->{
    Log.d("Preferences", String.format("%s -> %s", key, value));
});

Lo snippet precedente ottiene un'istanza del valore predefinito SharedPreferences per l'app, accede a tutti i valori memorizzati, esegue il loop su questi e li stampa Logcat.