web-dev-qa-db-ja.com

保存場所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スタイルの方法で参照する可能性があります(文字列を参照するのではない)?

59
pixel

strings.xmlにキーを格納し、preferences.xml他のすべての値と同様に_Android:key="@string/preference_enable"_。

コードでは、getString(R.string.preference_enable)と入力してキーを参照できます

_<xliff:g>_タグを使用して、翻訳されないように文字列をマークできます。 ローカリゼーションチェックリストを参照してください

_<string name="preference_enable"><xliff:g id="preference_key">enable</xliff:g></string>
_
71
pixel

「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));
13
Nico Pedraza

私が知る限り、設定キーを参照するより良い方法はありません(クラスに文字列を格納するために静的な最終文字列を使用することを除いて)。

SDKドキュメントで指定された example は、例で指定したものと同じです。

1
Adrian

getString(R.string.key_defined_in_xml)を試してください。

1
molnarm

ヘルパークラスを使用してgetString()を非表示にするのはどうですか?各アクティビティまたはサービスでヘルパーを1回インスタンス化します。例えば:

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);
    }
}
1

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"/>

参照: 翻訳できない行の構成

0
Jeffrey