1. ホーム
  2. android

[解決済み] Android XML パーセントシンボル

2022-03-17 14:36:11

質問

文字列の配列があり、その中の % シンボルが使用されています。を使用する際の適切な書式 %% . その配列の中に、複数の % というエラーが発生します。

 Multiple annotations found at this
 line:
 - error: Multiple substitutions specified in non-positional format;
   did you mean to add the formatted="false" attribute?
 - error: Found tag </item> where </string-array> is expected

解決方法は?

Androidアセットパッケージングツール( aapt )になりました。 最新のリリースでは、非常に厳しい に使用され、現在では すべて Androidのバージョン。を許可しなくなったため、aapt-errorが発生します。 位置しない書式指定子 .

ここでは、リソース文字列に%-シンボルを含める方法について、いくつかのアイデアを紹介します。

文字列の中に書式指定子や置換子が必要ない場合は、単純に formatted 属性を設定し、それを false :

<string formatted="false">%a + %a == 2%a</string>

この場合、文字列はフォーマット文字列としてではなく Formatter ということで、%記号をエスケープする必要はありません。結果として得られる文字列は "%a + %a == 2%a"です。

を省略した場合 formatted="false" 属性を使用すると、その文字列はフォーマット文字列として使用されるため、%-シンボルをエスケープする必要があります。これはダブル-%で正しく行われます。

<string>%%a + %%a == 2%%a</string>

現在 aapt はエラーになりませんが、使い方によっては、結果の文字列が "%%a + %%a == 2%%a" になる可能性があります。 Formatter がフォーマットなしで呼び出された場合 引数 :

Resources res = context.getResources();

String s1 = res.getString(R.string.str);
// s1 == "%%a + %%a == 2%%a"

String s2 = res.getString(R.string.str, null);
// s2 == "%a + %a == 2%a"

xmlとコードがなければ、あなたの問題が何であるかを正確に伝えることは困難ですが、これがメカニズムを少し理解する助けになれば幸いです。