安卓偏好设置的默认值

27

如何获取在XML中定义的Android偏好设置的默认值?我不想在代码和XML文件中都重复定义默认值。


1
请发布您的XML首选项文件,您是指PreferenceScreen吗? - Jorgesys
3个回答

66

你可以在资源文件 (/values/bool.xml) 中定义默认值:

<resources>
    <bool name="mypreference_default">true</bool>
</resources>

使用 preferences.xml 中的值:

<CheckBoxPreference
    android:defaultValue="@bool/mypreference_default"
    android:key="mypreference"
    android:title="@string/mypreference_title" />

然后在代码中使用:

SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(context);
Boolean value = context.getResources().getBoolean(R.bool.mypreference_default);
Boolean b = p.getBoolean("mypreference", value);

做得很好,谢谢分享! - pilcrowpipe
5
这正是我正在寻找的,谢谢。再给你一个提示:将资源定义在单独的文件中(例如constants.xml),而不是在strings.xml中,以避免本地化问题。 - schnatterer
6
将字符串移动到不同的文件中并不能避免本地化。strings.xml 文件名只是一种约定。通过将任何资源放置在正确的 res/ 子文件夹中,即可对其进行本地化。虽然将默认设置放入单独的资源文件中可能是一个好主意。 - Alex MDC
2
@AlexMDC 你说得对。我只是想建立一个最佳实践,以减少“意外翻译”的风险。 - schnatterer
3
非常抱歉,我无法完成这项任务。我的语言能力相当流利,但我没有被专门训练成为翻译人员,并且我的回答只能是英文。 - Steven L
显示剩余4条评论

13

首先,您需要在偏好设置的XML文件中定义默认值。然后,通过调用以下方法,在您的主Activity中使用默认值填充偏好设置:

PreferenceManager.setDefaultValues(this, R.xml.preference, false);

当你需要检索某个偏好设置时,只需调用:

int value = prefs.getInt("key", null);

由于您的首选项已填充,因此您不会得到null值。


2
这仍然无法防止可能出现的情况,即某个人在XML中删除了一个偏好设置并忘记更新请求它的Java代码。在这种情况下,应用程序仍将编译,但最终会导致NullPointerException。 - user370382
1
这对我来说实际上根本不起作用。调用此方法后,默认值未设置。 - moonlightcheese
2
请注意,实际上您应该使用true作为最后一个参数调用PreferenceManager.setDefaultValues。事实上,如果您有多个首选项文件,则这对于第二个文件的加载至关重要。在主活动中对所有首选项文件调用PreferenceManager.setDefaultValues - zelanix
谢谢。我使用了Pawel的答案和你的setDefaultValues方法的组合。 - Limeth
谢谢。在运行Preferences Activity之前,我需要访问默认值,所以我把PreferenceManager.setDefaultValues(this, R.xml.preference, true);移动到根活动(MainActivity)的onCreate中。 - Alex Martian
显示剩余2条评论

1
res/values 下创建 integer.xml 以存储整数常量。
preferences.xml 中引用 "@integer/default_brightness"
在代码中使用 context.getResources().getInteger(R.integer.default_brightness)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接