Android XML パーセント記号 質問する

Android XML パーセント記号 質問する

シンボルが使用されている文字列の配列があります%。 を使用するための適切な形式は%です%。その配列に複数の文字列がある場合、%このエラーが発生します。

 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

ベストアンサー1

Android Asset Packaging Tool(aapt)は最新リリースでは非常に厳しい現在、すべてのAndroidバージョンで使用されています。あなたが受け取っているaaptエラーは、もはや許可されていないために発生します。非位置指定書式指定子

リソース文字列に % 記号を含める方法をいくつか紹介します。

文字列に書式指定子や置換が必要ない場合は、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 とコードがないと、問題が正確に何であるかを言うのは困難ですが、これがメカニズムを少し理解するのに役立つことを願っています。

おすすめ記事