Uporządkuj ustawienia Zawiera Android Jetpack.

Duże i złożone ekrany ustawień mogą utrudniać użytkownikowi konkretne ustawienie, które chce zmienić. Biblioteka preferencji oferuje Poniżej znajdziesz sposoby na lepsze porządkowanie ekranów ustawień.

Kategorie preferencji

Jeśli masz kilka powiązanych Preference obiekty na pojedynczym ekranu, możesz je pogrupować za pomocą PreferenceCategory O PreferenceCategory wyświetla tytuł kategorii i wizualnie oddziela .

Aby zdefiniować PreferenceCategory w pliku XML, opakuj tagi Preference za pomocą tagu PreferenceCategory w następujący sposób:

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

Wynik wygląda tak:

Obraz przedstawiający preferencje z kategoriami
Rysunek 1. Ustawienia w kategoriach.

Podziel hierarchię na kilka ekranów

Jeśli masz dużą liczbę Preference obiektów lub odrębnych kategorii, mogą wyświetlać je na osobnych ekranach. Każdy ekran PreferenceFragmentCompat ma własną, osobną hierarchię. Preference obiektów wyświetlane na ekranie początkowym mogą prowadzić do podekranów, które zawierają powiązane ustawieniach.

Rysunek 2 przedstawia prostą hierarchię obejmującą 2 kategorie: Wiadomości oraz Synchronizacja.

Obraz przedstawiający ekran preferencji z hierarchiami
Rysunek 2. Prosta hierarchia z 2 kategoriami.

Rysunek 3 przedstawia ten sam zestaw ustawień podzielony na kilka ekranów:

Obraz przedstawiający hierarchię podzielonej na kilka ekranów
Rysunek 3. Hierarchia podzielona na kilka ekranów.

Aby połączyć ekrany z elementem Preference, możesz zadeklarować app:fragment w pliku XML lub możesz użyć Preference.setFragment(). Uruchom pełną nazwę pakietu PreferenceFragmentCompat, gdy znak Preference został kliknięty, tak jak w tym przykładzie:

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

Gdy użytkownik kliknie Preference z powiązanym linkiem Fragment, metoda PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment(). . Ta metoda polega na wyświetlaniu nowego ekranu ekran jest zaimplementowany w otaczającym je elemencie Activity.

Typowa implementacja wygląda podobnie do tej:

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

Ekrany preferencji

Deklarowanie zagnieżdżonych hierarchii w obrębie tego samego zasobu XML za pomocą zagnieżdżonego &lt;PreferenceScreen&gt; nie jest już obsługiwany. Użyj zagnieżdżonych obiektów Fragment .

Używaj osobnych modułów

Z drugiej strony, jeśli musisz znacznie dostosować każdy ekran lub jeśli chcesz mieć pełny ekran Activity przechodzi między ekranami, możesz użyć osobnego elementu Activity do: co PreferenceFragmentCompat. W ten sposób możesz dostosować każdy Activity i odpowiadający mu ekran ustawień. W przypadku większości aplikacji poleca to; zamiast tego użyj pola Fragments w sposób opisany powyżej.

Więcej informacji o uruchamianiu Activity z Preference znajdziesz w artykule Działania związane z preferencjami.