Ustawienia Część Android Jetpack.

Ustawienia pozwalają użytkownikom zmieniać funkcje i działanie aplikacji. Ustawienia mogą mieć wpływ na działanie aplikacji w tle, np. na częstotliwość synchronizowania danych z chmurą. Mogą też mieć szerszy zasięg, na przykład zmieniać zawartość i prezentację interfejsu użytkownika.

Aby zintegrować z aplikacją ustawienia konfigurowalne przez użytkownika, skorzystaj z biblioteki preferencji AndroidX. Ta biblioteka zarządza interfejsem i obsługuje miejsce na dane, dzięki czemu możesz określać tylko indywidualne ustawienia, które może konfigurować użytkownik. Jest ona wyposażona w motyw Material Design, który zapewnia spójne wrażenia użytkownika na różnych urządzeniach i w różnych wersjach systemu operacyjnego.

Rozpocznij

Preference to podstawowy element biblioteki preferencji. Ekran ustawień zawiera hierarchię Preference. Możesz zdefiniować tę hierarchię jako zasób XML lub utworzyć hierarchię w kodzie.

W kolejnych sekcjach opisujemy, jak utworzyć prosty ekran ustawień za pomocą biblioteki preferencji AndroidX.

Zanim zaczniesz, dodaj do pliku build.gradle zależność z biblioteką preferencji:

Odlotowy

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 w formacie XML.

Utwórz hierarchię

W projekcie przejdź do folderu res/xml, utwórz plik preferences.xml i dodaj do niego ten 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 obiekt Preference bez widżetu.

Podczas tworzenia hierarchii każdy element Preference musi mieć unikalny klucz.

Zwiększanie hierarchii

Aby powiększyć hierarchię na podstawie atrybutu XML, utwórz PreferenceFragmentCompat, zastąp onCreatePreferences() i podaj zasób XML do nadużywania obiektu, 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);
    }
}

Następnie możesz dodać obiekt Fragment do urządzenia Activity, tak jak każdy inny 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 tej ilustracji:

Obraz przedstawiający przykładowy ekran preferencji
Rysunek 1. Ekran ustawień utworzony przy użyciu 2 obiektów Preference.

Monitorowanie preferencji

Aby otrzymać zdarzenie w przypadku zmiany preferencji, zarejestruj odbiornik:

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

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

Odczytaj bieżącą wartość ustawienia

PreferenceFragmentCompat ukrywa większość maszyn używanych do zapisywania i odczytywania ustawień. Wszystkie dane są jednak przechowywane za pomocą właściwości 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

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all

preferences.forEach {
    Log.d("Preferences", "${it.key} -> ${it.value}")
}

Poprzedni fragment kodu uzyskuje instancję domyślnego SharedPreferences w przypadku aplikacji, uzyskuje dostęp do wszystkich zapisanych wartości, zapętla je i drukuje w Logcat.