web-dev-qa-db-ja.com

文字列リソースファイルのフォーマットステートメント

次のように、通常のstrings.xmlリソースファイルに文字列が定義されています:

<string name="hello_world"> HELLO</string>

以下のようなフォーマット文字列を定義することは可能ですか?

 result_str = String.format("Amount: %.2f  for %d days ",  var1, var2);

strings.xmlリソースファイルに?

特殊文字をエスケープしようとしましたが、機能しませんでした。

120
CocoNess

XMLでformatted="false"を使用する必要はありません。短いバージョンではなく、%[POSITION]$[TYPE][POSITION]は属性の位置、[TYPE]は変数の型)を使用するだけで十分です。たとえば、%sまたは%d

Android Docs:String Formatting and Styling :からの引用

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

この例では、書式文字列には2つの引数があります。%1$sは文字列で、%2$dは10進整数です。次のように、アプリケーションからの引数を使用して文字列をフォーマットできます。

Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);
222
LocalPCGuy

formatted="false"を文字列リソースに追加する必要があります


ここに例があります

strings.xmlで:

<string name="all" formatted="false">Amount: %.2f%n  for %d days</string>

あなたのコードで:

yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));
99
Sherif elKhatib

内部ファイルstrings.xmlは、次のようなStringリソースを定義します。

<string name="string_to_format">Amount: %1$f  for %2$d days%3$s</string>

コード内で(Contextから継承すると仮定して)次の操作を実行します。

 String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);

LocalPCGuy または Giovanny Farto M。 からの回答と比較すると、String.formatメソッドは必要ありません。)

11
Timo Bähr

Android Docs からの引用:

String.format(String, Object...)を使用して文字列を書式設定する必要がある場合は、書式設定引数を文字列リソースに配置することにより、書式設定を行うことができます。たとえば、次のリソースの場合:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

この例では、書式文字列には2つの引数があります。%1$sは文字列で、%2$dは10進数です。次のように、アプリケーションからの引数を使用して文字列をフォーマットできます。

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
7