16

strings.xmlで文字列を参照することは可能ですか?

例えば:

<string name="application_name">@string/first_name Browser</string>
<string name="first_name">Chrome</string>

要件に応じて、first_nameの値を「Chrome」、「Firefox」、または「Opera」に切り替えることができます。

4

3 に答える 3

24

文字列リソースの参照を指定できますが、制限は次のとおりです。

<string name="first_name">Chrome</string>
<string name="application_name">@string/first_name</string> // gives "Chrome"
<string name="application_name">Chrome @string/first_name</string> // gives "Chrome @string/first_name"
<string name="application_name">@string/first_name Chrome </string> // gives error

コンテンツが「@」で始まる場合、Androidはこれを参照文字列と見なします。Androidのツールは@とその次の文字列を文字列の参照名として使用するため、エラーが発生する最後のケースを参照してください。「@」というリソースを検索しようとします。存在しないstring/first_nameChrome」。

文字列形式を使用して、次のようなサブ文字列を動的に割り当てることができます。<string name="application_name">%1$s browser</string>

使用する

String text = String.format(res.getString(R.string.application_name), "Chrome");
于 2012-04-12T10:35:33.123 に答える
3

はい、Java / Kotlinコードを追加しなくても、ビルド時にのみXMLを使用して追加できるこの小さなライブラリを使用してこれを行うことができます。したがって、あなたの場合、次のように文字列を設定する必要があります。

<string name="template_application_name">${first_name} Browser</string>
<string name="first_name">Chrome</string>

そして、gradleプラグインを実行すると、次のようになります。

<string name="application_name">Chrome Browser</string>

これはライブラリへのリンクです:https ://github.com/LikeTheSalad/android-string-reference

免責事項:私はこのライブラリの作者です。

于 2019-10-25T10:53:39.037 に答える
2

strings.xmlの文字列は固定されており、実行時に変更することはできません。ケースごとに文字列を定義し、コードで切り替えを行う必要があります。

String name;

if (/* browser is Chrome*/) {
    name = getString(R.string.first_name_chrome);
} else if (/* browser is Firefox */) {
    name = getString(R.string.first_name_firefox);
}

ただし、アプリケーションにさまざまな言語の正しい文字列を自動的に選択させることができます。これは、ローカライズされたフォルダー(values-en、values-fr、values-plなど)に文字列ファイルを配置することで実行できます。

ローカリゼーションの詳細については、http: //www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/をご覧ください。

于 2012-04-12T10:37:45.950 に答える