在 PreferenceScreen 和代码中共享设置名称和默认值

Sharing setting names and default value in PreferenceScreen and Code

我有我的 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

有没有办法共享它们(例如在一些公共资源中),这样我就可以轻松地重构它们而无需在两个地方进行?

找到了这样做的方法

我在 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 和代码共享的键、标题和默认值找到一个共同的位置。