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:
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.
Rysunek 3 przedstawia ten sam zestaw ustawień podzielony 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
<PreferenceScreen>
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.