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