Einstellungen Teil von Android Jetpack

Mit Einstellungen können Nutzer die Funktionalität und das Verhalten einer App ändern. Sie können das Hintergrundverhalten beeinflussen, z. B. wie oft die App Daten mit der Cloud synchronisiert, oder sie haben eine größere Reichweite, z. B. Änderungen am Inhalt und an der Darstellung der Benutzeroberfläche.

Verwende die AndroidX-Einstellungsbibliothek, um vom Nutzer konfigurierbare Einstellungen in deine App zu integrieren. Diese Bibliothek verwaltet die Benutzeroberfläche und interagiert mit dem Speicher, sodass Sie nur die individuellen Einstellungen definieren, die der Nutzer konfigurieren kann. Die Bibliothek hat ein Material Design-Design, das eine einheitliche Nutzererfahrung auf allen Geräten und Betriebssystemversionen bietet.

Erste Schritte

Ein Preference ist der grundlegende Baustein der Präferenzbibliothek. Ein Einstellungsbildschirm enthält eine Preference-Hierarchie. Sie können diese Hierarchie als XML-Ressource definieren oder eine Hierarchie im Code erstellen.

In den folgenden Abschnitten wird beschrieben, wie Sie mithilfe der AndroidX-Einstellungsbibliothek einen einfachen Einstellungsbildschirm erstellen.

Fügen Sie der Datei build.gradle zuerst die Abhängigkeit der Präferenzbibliothek hinzu:

Groovig

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

Kotlin

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

Nach der Gradle-Synchronisierung können Sie mit dem XML-Teil der Aufgabe fortfahren.

Hierarchie erstellen

Wechseln Sie in Ihrem Projekt zum Ordner res/xml, erstellen Sie eine preferences.xml-Datei und fügen Sie dieser den folgenden Code hinzu:

<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>

Diese Hierarchie enthält zwei Preference-Objekte: ein SwitchPreferenceCompat, mit dem Nutzer eine Einstellung aktivieren und deaktivieren können, und ein einfaches Preference-Objekt ohne Widget.

Beim Erstellen einer Hierarchie muss jede Preference einen eindeutigen Schlüssel haben.

Hierarchie aufblähen

Zum Aufblähen einer Hierarchie über ein XML-Attribut erstellen Sie einen PreferenceFragmentCompat, überschreiben onCreatePreferences() und geben die XML-Ressource für die Inflation an, wie im folgenden Beispiel gezeigt:

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);
    }
}

Sie können dieses Fragment dann wie jede andere Fragment zu Activity hinzufügen:

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();
    }
}

Das Ergebnis wird in der folgenden Abbildung dargestellt:

Ein Bild, das ein Beispiel für einen Einstellungsbildschirm zeigt
Abbildung 1: Ein Einstellungsbildschirm, der mit zwei Preference-Objekten erstellt wurde.

Einstellungen beobachten

Sie können ein Ereignis abrufen, wenn sich eine Einstellung ändert, indem Sie einen Listener dafür registrieren:

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

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.
    }

Aktuelle Einstellung lesen

PreferenceFragmentCompat verbirgt einen Großteil der Maschinen, die zum Speichern und Lesen der Einstellungen erforderlich sind. Es wird jedoch alles mit SharedPreferences gespeichert und Sie können diese Werte wie gewohnt mit SharedPreferences lesen:

Kotlin

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all

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

Java

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all

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

Das vorherige Snippet ruft eine Instanz der Standard-SharedPreferences für die Anwendung ab, greift auf alle gespeicherten Werte zu, führt eine Schleife aus und gibt sie in Logcat aus.