Einstellungen organisieren Teil von Android Jetpack

Große und komplexe Bildschirme mit Einstellungen können es Nutzern erschweren, ein Einstellung auswählen, die sie ändern möchten. Die Einstellungsbibliothek bietet die um Ihre Einstellungsbildschirme besser zu organisieren.

Einstellungskategorien

Wenn Sie mehrere ähnliche Preference-Objekte in einem einzelnen können Sie sie mithilfe eines PreferenceCategory A PreferenceCategory zeigt einen Kategorietitel an und trennt die Kategorie.

Um ein PreferenceCategory in XML zu definieren, umschließen Sie die Preference-Tags mit einem PreferenceCategory so:

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

    <PreferenceCategory
        app:key="notifications_category"
        app:title="Notifications">

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

    </PreferenceCategory>

    <PreferenceCategory
        app:key="help_category"
        app:title="Help">

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

    </PreferenceCategory>

</PreferenceScreen>

Das Ergebnis sieht so aus:

<ph type="x-smartling-placeholder">
</ph> Ein Bild, das Einstellungen mit Kategorien zeigt <ph type="x-smartling-placeholder">
</ph> Abbildung 1: Einstellungen innerhalb von Kategorien.

Hierarchien in mehrere Bildschirme aufteilen

Bei einer großen Anzahl von Preference-Objekten oder unterschiedlichen Kategorien auf separaten Bildschirmen angezeigt werden. Jeder Bildschirm ist ein PreferenceFragmentCompat mit einer eigenen separaten Hierarchie. Preference Objekte auf Ihrem Startbildschirm können dann mit Subscreens verknüpft werden, die ähnliche Einstellungen.

Abbildung 2 zeigt eine einfache Hierarchie, die zwei Kategorien enthält: Nachrichten und Synchronisierung:

<ph type="x-smartling-placeholder">
</ph> Ein Bild, auf dem ein bevorzugter Bildschirm mit Hierarchien zu sehen ist <ph type="x-smartling-placeholder">
</ph> Abbildung 2: Eine einfache Hierarchie mit zwei Kategorien.

Abbildung 3 zeigt dieselben Einstellungen, aufgeteilt auf mehrere Bildschirme:

<ph type="x-smartling-placeholder">
</ph> Ein Bild, das eine Hierarchie zeigt, die auf mehrere Bildschirme aufgeteilt ist <ph type="x-smartling-placeholder">
</ph> Abbildung 3: Eine in mehrere Bildschirme unterteilte Hierarchie.

Um Bildschirme mit einem Preference zu verknüpfen, kannst du ein app:fragment in XML oder können Sie Preference.setFragment() Starten Sie den vollständigen Paketnamen von PreferenceFragmentCompat, wenn wird Preference angetippt, wie im folgenden Beispiel gezeigt:

<Preference
        app:fragment="com.example.SyncFragment"
        .../>

Wenn ein Nutzer auf eine Preference mit einer verknüpften Fragment tippt, wird die Oberfläche Methode PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment() aufgerufen wird. Bei dieser Methode zeigen Sie den neuen Bildschirm an wird der Bildschirm in der umgebenden Activity implementiert.

Eine typische Implementierung sieht etwa so aus:

Kotlin

class MyActivity : AppCompatActivity(),
    PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    ...
    override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
        // Instantiate the new Fragment.
        val args = pref.extras
        val fragment = supportFragmentManager.fragmentFactory.instantiate(
                classLoader,
                pref.fragment)
        fragment.arguments = args
        fragment.setTargetFragment(caller, 0)
        // Replace the existing Fragment with the new Fragment.
        supportFragmentManager.beginTransaction()
                .replace(R.id.settings_container, fragment)
                .addToBackStack(null)
                .commit()
        return true
    }
}

Java

public class MyActivity extends AppCompatActivity implements
        PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
    ...
    @Override
    public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
        // Instantiate the new Fragment.
        final Bundle args = pref.getExtras();
        final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate(
                getClassLoader(),
                pref.getFragment());
        fragment.setArguments(args);
        fragment.setTargetFragment(caller, 0);
        // Replace the existing Fragment with the new Fragment.
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.settings_container, fragment)
                .addToBackStack(null)
                .commit();
        return true;
    }
}

Bildschirmeinstellungen

Verschachtelte Hierarchien innerhalb derselben XML-Ressource mithilfe einer verschachtelten &lt;PreferenceScreen&gt; wird nicht mehr unterstützt. Verschachtelte Fragment-Objekte verwenden .

Separate Aktivitäten verwenden

Wenn Sie die einzelnen Bildschirme stark anpassen müssen oder eine vollständige Activity-Übergänge zwischen Bildschirmen. Du kannst ein separates Activity für PreferenceFragmentCompat. So können Sie jedes einzelne Element Activity und der entsprechende Einstellungsbildschirm. Bei den meisten Apps empfehlen dies: Verwende stattdessen Fragments wie zuvor beschrieben.

Weitere Informationen zum Starten eines Activity aus einem Preference finden Sie unter Aktionen für Einstellungen: