Ustawienia Zawiera Android Jetpack.
Ustawienia pozwalają użytkownikom zmieniać funkcje i działanie aplikacji. Ustawienia mogą wpływać na działanie w tle, np. na częstotliwość synchronizowania danych przez aplikację w chmurze lub mogą mieć szerszy zasięg, np. zmieniać treści i zaprezentować interfejs.
Aby zintegrować z aplikacją ustawienia, które można skonfigurować przez użytkownika, skorzystaj z AndroidaX Biblioteka preferencji. Ta biblioteka zarządza interfejsem użytkownika i współpracuje z dzięki czemu możesz określić tylko indywidualne ustawienia, konfiguracji. Biblioteka zawiera motyw Material Design, spójną obsługę na różnych urządzeniach i w różnych wersjach systemów operacyjnych.
Rozpocznij
Preference
to budynek podstawowy
w bibliotece preferencji. Ekran ustawień zawiera Preference
hierarchii. Możesz zdefiniować tę hierarchię jako zasób XML lub utworzyć kompilację
hierarchię w kodzie.
W poniższych sekcjach opisano, jak utworzyć prosty ekran ustawień za pomocą Biblioteka ustawień AndroidaX.
Zanim zaczniesz, dodaj zależność z biblioteki preferencji do swojego elementu (build.gradle
)
plik:
Odlotowe
dependencies { implementation "androidx.preference:preference-ktx:1.2.0" }
Kotlin
dependencies { implementation("androidx.preference:preference-ktx:1.2.0") }
Po synchronizacji Gradle możesz przejść do części zadania dotyczącej kodu XML.
Tworzenie hierarchii
W projekcie przejdź do folderu res/xml
, utwórz plik preferences.xml
,
i dodaj do niego następujący kod:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> <Preference app:key="feedback" app:title="Send feedback" app:summary="Report technical issues or suggest new features"/> </PreferenceScreen>
Ta hierarchia zawiera 2 obiekty Preference
:
SwitchPreferenceCompat
.
który pozwala użytkownikom włączać i wyłączać ustawienie, oraz podstawowy Preference
bez
widżet.
Podczas tworzenia hierarchii każdy element Preference
musi mieć unikalny klucz.
Pobudzaj hierarchię
Aby zwiększyć hierarchię według atrybutu XML, utwórz atrybut
PreferenceFragmentCompat
zastąpić
onCreatePreferences()
,
i dostarcz zasób XML do ekspansji, jak w tym przykładzie:
Kotlin
class MySettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) } }
Java
public class MySettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); } }
Możesz dodać tę formę płatności (Fragment
) do urządzenia Activity
, tak jak w przypadku każdego innego urządzenia
Fragment
:
Kotlin
class MySettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportFragmentManager .beginTransaction() .replace(R.id.settings_container, MySettingsFragment()) .commit() } }
Java
public class MySettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .replace(R.id.settings_container, new MySettingsFragment()) .commit(); } }
Wynik jest widoczny na tym obrazie:
Monitorowanie preferencji
Możesz otrzymać zdarzenie, gdy zmieni się Twoje preferencje, rejestrując detektor dla :
Kotlin
findPreference<SwitchPreferenceCompat>("notifications") ?.setOnPreferenceChangeListener { _, newValue -> Log.d("Preferences", "Notifications enabled: $newValue") true // Return true if the event is handled. } findPreference<Preference>("feedback") ?.setOnPreferenceClickListener { Log.d("Preferences", "Feedback was clicked") true // Return true if the click is handled. }
Java
SwitchPreferenceCompat notificationsPref = findPreference("notifications"); if (notificationsPref != null) { notificationsPref.setOnPreferenceChangeListener((preference, newValue) -> { Log.d("Preferences", String.format("Notifications enabled: %s", newValue)); return true; // Return true if the event is handled. }); } Preference feedbackPref = findPreference("feedback"); if (feedbackPref != null) { feedbackPref.setOnPreferenceClickListener((preference) -> { Log.d("Preferences", "Feedback was clicked"); return true; // Return true if the event is handled. }); }
Odczytaj bieżącą wartość preferencji
Funkcja PreferenceFragmentCompat
ukrywa wiele maszyn zaangażowanych w zapisywanie i
czytanie preferencji. Jednak wszystkie dane są przechowywane przy użyciu funkcji
SharedPreferences
i możesz odczytywać te wartości tak jak w przypadku
SharedPreferences
:
Kotlin
val preferences = PreferenceManager.getDefaultSharedPreferences(this).all preferences.forEach { Log.d("Preferences", "${it.key} -> ${it.value}") }
Java
var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll(); preferences.forEach((key, value) ->{ Log.d("Preferences", String.format("%s -> %s", key, value)); });
Poprzedni fragment kodu uzyskuje wystąpienie domyślnego elementu SharedPreferences
dla
aplikacji, uzyskuje dostęp do wszystkich zapisanych wartości, zapętla je i drukuje
Logcat.