Java-在哪里存储Android首选项键?

创建首选项活动时,我在xml文件中定义所有首选项。 每个首选项都有在此xml中定义的键。 但是,当我访问首选项时,我写道:

SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean foo_value = appPreferences.getBoolean("foo_key_defined_in_xml", false);

有什么方法可以避免以硬编码方式引用“ foo_key_defined_in_xml”?也许有可能以R样式方式引用它(而不是引用字符串)?

pixel asked 2019-11-15T23:57:36Z
6个解决方案
71 votes

我发现可以将键存储在strings.xml中,并像其他所有值<xliff:g>一样从preferences.xml引用它们。

在代码中,您可以通过键入<xliff:g>来引用键

您可以使用<xliff:g>标记将字符串标记为不翻译。 请参阅本地化清单

<string name="preference_enable"><xliff:g id="preference_key">enable</xliff:g></string>
pixel answered 2019-11-15T23:58:22Z
13 votes

您可以在“ res / values”中使用“ keys.xml”文件,但应放置如下内容,这样,在使用多种语言时就不会出现问题:

    <resources
    xmlns:tools="http://schemas.android.com/tools"
    tools:ignore="MissingTranslation">

    <string name="key1">key1</string>
    <string name="key2">key2</string>
...
</resources>

然后,您可以像在xml中的普通字符串一样引用它:

....
android:key="@string/key1"
....

或例如在您的Java代码中:

SwitchPreference Pref1= (SwitchPreference) getPreferenceScreen().findPreference(getString(R.string.key1));
Nico Pedraza answered 2019-11-15T23:58:58Z
1 votes

尝试getString(R.string.key_defined_in_xml)

molnarm answered 2019-11-15T23:59:22Z
1 votes

据我所知,没有更好的方法来引用首选项键(除了可能使用静态最终String将字符串存储在类上之外)。

SDK文档中的示例与示例中的示例相同,

Adrian answered 2019-11-15T23:59:52Z
1 votes

关于使用帮助程序类隐藏getString()的操作-在每个活动或服务中实例化一次该帮助程序。 例如:

class Pref {

    final String smsEnable_pref;
    final String interval_pref;
    final String sendTo_pref;
    final String customTemplate_pref;
    final String webUrl_pref;

    Pref(Resources res) {       
         smsEnable_pref = res.getString(R.string.smsEnable_pref);
         interval_pref = res.getString(R.string.interval_pref);
         sendTo_pref = res.getString(R.string.sendTo_pref);
         customTemplate_pref = res.getString(R.string.customTemplate_pref);
         webUrl_pref = res.getString(R.string.webUrl_pref);
    }
}
Michael Hamilton answered 2019-11-16T00:00:16Z
0 votes

在strings.xml中,将键标记为不可翻译:

<string name="screw_spacing_key" translatable="false">Screw spacing</string>
<string name="screw_spacing_title">Screw spacing</string>
<string name="screw_spacing_summary">Set screw spacing</string>

用法:

<EditTextPreference
    android:key="@string/screw_spacing_key"
    android:title="@string/screw_spacing_title"
    android:summary="@string/screw_spacing_summary"/>

请参阅:配置不可翻译的行

Jeffrey answered 2019-11-16T00:00:47Z
translate from https://stackoverflow.com:/questions/2857121/where-to-store-android-preference-keys