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:

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