When I create preference activity I define all preferences in xml file. Every preference has a key defined in this xml. But when I access preference I write:
SharedPreferences appPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean foo_value = appPreferences.getBoolean("foo_key_defined_in_xml", false);
Is there any way to avoid referencing "foo_key_defined_in_xml" in hard-coded way? Maybe there is a possibility to reference it in R style way (not to refer to string)?
Try
getString(R.string.key_defined_in_xml)
.In strings.xml mark the key as untranslatable:
Usage:
See: Configure untranslatable rows
As far as I know there's no better way of referencing preference keys (aside from maybe using a static final String to store the string on the class).
The example given in the SDK docs does the same as what you've given in your example,
You could use a "keys.xml" files in "res/values", but should put something like this, this way you should dont have problem when you are using multiple languages:
Then you could reference it like a normal string in xml:
or in your java code for example:
I've found that it's possible to store keys in strings.xml and refer to them from preferences.xml just like all other values
android:key="@string/preference_enable"
.In code you can refer to key by typing
getString(R.string.preference_enable)
You can mark the string to not be translated using a
<xliff:g>
tag. See Localization ChecklistWhat about using a helper class to hide the getString() - instantiate the helper once in each activity or service. For example: