Einstellungen Teil von Android Jetpack

Mit Einstellungen können Nutzer die Funktionalität und das Verhalten einer App ändern. Einstellungen können das Hintergrundverhalten beeinflussen, z. B. wie oft die App Daten mit dem oder eine größere Reichweite erzielen, indem Sie z. B. Inhalte und die Darstellung der Benutzeroberfläche.

Verwende zur Integration von durch Nutzer konfigurierbaren Einstellungen in deine App die AndroidX- Einstellungsbibliothek. Diese Bibliothek verwaltet die Benutzeroberfläche und interagiert mit sodass Sie nur die individuellen Einstellungen festlegen, konfigurieren. Die Bibliothek enthält ein Material Design-Design, Nutzererfahrung auf allen Geräten und Betriebssystemversionen einheitlich.

Erste Schritte

Ein Preference ist das grundlegende Gebäude der Einstellungsbibliothek. Ein Einstellungsbildschirm enthält ein Preference Hierarchie. Sie können diese Hierarchie als XML-Ressource definieren oder erstellen, eine Hierarchie im Code.

In den folgenden Abschnitten wird beschrieben, wie Sie mithilfe der Funktion AndroidX-Einstellungsbibliothek.

Bevor Sie beginnen, fügen Sie die Abhängigkeit der Präferenzbibliothek zu build.gradle hinzu. Datei:

Cool

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

Kotlin

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

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

Hierarchie erstellen

Öffnen Sie in Ihrem Projekt den Ordner res/xml, erstellen Sie eine preferences.xml-Datei, und fügen Sie folgenden Code ein:

<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 der Nutzer eine Einstellung aktivieren und deaktivieren können, sowie eine einfache Preference ohne Widget.

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

Hierarchie erhöhen

Um eine Hierarchie aus einem XML-Attribut in die Höhe zu treiben, erstellen Sie ein PreferenceFragmentCompat, überschreiben onCreatePreferences(), und stellen Sie die XML-Ressource für die Inflation bereit, 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);
    }
}

Diese Fragment kannst du dann wie gewohnt deinem Activity hinzufügen 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();
    }
}

Das Ergebnis ist in der folgenden Abbildung dargestellt:

<ph type="x-smartling-placeholder">
</ph> Ein Bild, das ein Beispiel für den Bildschirm „Einstellungen“ zeigt <ph type="x-smartling-placeholder">
</ph> Abbildung 1: Ein Einstellungsbildschirm, der mit zwei Preference erstellt wurde Objekte.

Einstellungen überwachen

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

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

Aktuellen Einstellungswert lesen

PreferenceFragmentCompat verbirgt einen Großteil der Maschinen, die zum Speichern und beim Lesen der Einstellungen. Alles wird jedoch mit SharedPreferences. Sie können diese Werte wie gewohnt lesen, 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));
});

Mit dem vorherigen Snippet wird eine Instanz des Standard-SharedPreferences für der App, greift auf alle gespeicherten Werte zu, überläuft sie und gibt sie in Logcat