Android偏好的默认值

hpi*_*que 23 android android-preferences

如何获得XML中定义的Android首选项的默认值?我不想在代码和首选项XML中重复默认值的定义.

Paw*_*ski 61

您可以在resources(/values/bool.xml)中定义默认值:

<resources>
    <bool name="mypreference_default">true</bool>
</resources>
Run Code Online (Sandbox Code Playgroud)

使用以下值preferences.xml:

<CheckBoxPreference
    android:defaultValue="@bool/mypreference_default"
    android:key="mypreference"
    android:title="@string/mypreference_title" />
Run Code Online (Sandbox Code Playgroud)

然后在代码中使用:

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

  • @schnatterer:将字符串移动到另一个文件不会避免本地化.`strings.xml`文件名只是约定.任何资源都可以通过将其放在正确的`res /`子文件夹中进行本地化.虽然将默认设置放入单独的资源文件中可能是个好主意. (6认同)
  • 这正是我想要的,谢谢.还有一个提示:定义资源不在strings.xml中,而是在单独的文件中(例如constants.xml)以避免本地化. (5认同)
  • 或者你可以这样做:<string translatable ="false" (3认同)
  • @AlexMDC你是对的.我只是想尝试建立最佳实践,以降低"意外翻译"的风险. (2认同)

pix*_*xel 11

首先,您需要在首选项XML文件中定义默认值.然后,您可以通过调用以下方法在主Activity中使用默认值填充首选项:

PreferenceManager.setDefaultValues(this, R.xml.preference, false);
Run Code Online (Sandbox Code Playgroud)

当您需要检索某个偏好时,只需调用:

int value = prefs.getInt("key", null);
Run Code Online (Sandbox Code Playgroud)

由于您的首选项已填充,因此您无法获得null价值.

  • 这仍然无法防止线下某人从XML中删除首选项并忘记更新请求它的Java代码的可能情况.在这种情况下,应用程序仍将编译,但最终会出现NullPointerException. (2认同)
  • 请注意,您实际上应该使用最后一个参数调用`PreferenceManager.setDefaultValues`作为`true`.实际上,如果您有多个首选项文件,这对于正在加载的第二个文件至关重要.在主活动中的所有首选项文件上调用"PreferenceManager.setDefaultValues". (2认同)