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:

Ilustracja pokazująca przykładowy ekran ustawień
Rysunek 1. Ekran ustawień utworzony za pomocą dwóch funkcji Preference obiektów.

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.