Совместное использование имен настроек и значений по умолчанию в PreferenceScreen и Code

#android #android-preferences

#Android #android-настройки

Вопрос:

У меня есть мои настройки PreferenceSettings xml

 <?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
        xmlns:app="http://schemas.android.com/apk/res-auto">

    <SwitchPreferenceCompat
            app:defaultValue="true"
            app:key="notifications"
            app:title="Enable message notifications"/>

</androidx.preference.PreferenceScreen>
  

Чтобы получить значение в коде, я пишу

PreferenceManager.getDefaultSharedPreferences(this).getBoolean("notifications", true)

Отсюда вы можете видеть, что я написал notifications дважды, а значение по умолчанию true дважды.

Есть ли способ поделиться ими (например, в некоторых общих ресурсах), чтобы я мог легко реорганизовать их без необходимости делать в двух местах?

Ответ №1:

Найден способ сделать это

Я создаю в values папке имя файла settings.xml , которое содержит

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="my_default">true</bool>
    <string name="my_title">Enable message notifications</string>
    <string name="my_key">notifications</string>
</resources>
  

В моих настройках настроек у меня просто есть ссылка на эти ключи

 <?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
        xmlns:app="http://schemas.android.com/apk/res-auto">

    <SwitchPreferenceCompat
            app:defaultValue="@bool/my_default"
            app:key="@string/my_key"
            app:title="@string/my_titleg"/>

</androidx.preference.PreferenceScreen>
  

И мой код

 PreferenceManager.getDefaultSharedPreferences(this).getBoolean(
    resources.getString(R.string.my_key),
    resources.getBoolean(R.bool.my_default))
  

При этом у нас могло бы быть общее место для ключа, заголовка и значения по умолчанию, общего для XML и кода.