Einstellungen organisieren Teil von Android Jetpack
Große und komplexe Einstellungsbildschirme erschweren es Nutzern, eine bestimmte Einstellung zu finden, die sie ändern möchten. Mit der Einstellungsbibliothek haben Sie folgende Möglichkeiten, Ihre Einstellungsbildschirme besser zu organisieren.
Einstellungskategorien
Wenn sich mehrere zusammengehörige Preference
-Objekte auf einem Bildschirm befinden, können Sie sie mit einem PreferenceCategory
gruppieren. Ein PreferenceCategory
zeigt einen Kategorietitel an und trennt die Kategorie visuell.
Wenn Sie ein PreferenceCategory
in XML definieren möchten, umschließen Sie die Preference
-Tags so mit einem PreferenceCategory
:
<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:
Hierarchie in mehrere Bildschirme aufteilen
Wenn Sie eine große Anzahl von Preference
-Objekten oder unterschiedlichen Kategorien haben, können Sie sie auf separaten Bildschirmen anzeigen. Jeder Bildschirm ist ein PreferenceFragmentCompat
mit eigener Hierarchie. Preference
-Objekte auf dem Startbildschirm können dann mit Subbildschirmen verknüpft werden, die ähnliche Einstellungen enthalten.
Abbildung 2 zeigt eine einfache Hierarchie, die zwei Kategorien umfasst: Nachrichten und Synchronisierung.
Abbildung 3 zeigt dieselben Einstellungen, aufgeteilt auf mehrere Bildschirme:
Wenn du Bildschirme mit einem Preference
verknüpfen möchtest, kannst du app:fragment
in XML deklarieren oder Preference.setFragment()
verwenden.
Starte den vollständigen Paketnamen von PreferenceFragmentCompat
, wenn auf Preference
getippt wird, wie im folgenden Beispiel gezeigt:
<Preference app:fragment="com.example.SyncFragment" .../>
Wenn ein Nutzer auf ein Preference
mit einem verknüpften Fragment
tippt, wird die Schnittstellenmethode PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
aufgerufen. Bei dieser Methode wird der neue Bildschirm angezeigt und er wird in der umgebenden Activity
implementiert.
Eine typische Implementierung sieht in 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; } }
Präferenzbildschirme
Die Deklaration verschachtelter Hierarchien innerhalb derselben XML-Ressource mit einem verschachtelten <PreferenceScreen>
wird nicht mehr unterstützt. Verwenden Sie stattdessen verschachtelte Fragment
-Objekte.
Separate Aktivitäten verwenden
Wenn Sie jeden Bildschirm stark anpassen oder vollständige Activity
-Übergänge zwischen Bildschirmen wünschen, können Sie eine separate Activity
für jede PreferenceFragmentCompat
verwenden. Dadurch können Sie jede Activity
und den entsprechenden Einstellungsbildschirm vollständig anpassen. Für die meisten Apps empfehlen wir dies nicht. Verwenden Sie stattdessen Fragments
wie zuvor beschrieben.
Weitere Informationen zum Starten eines Activity
aus einem Preference
finden Sie unter Voreinstellungen.