シンボルが使用されている文字列の配列があります%
。 を使用するための適切な形式は%
です%
。その配列に複数の文字列がある場合、%
このエラーが発生します。
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 とコードがないと、問題が正確に何であるかを言うのは困難ですが、これがメカニズムを少し理解するのに役立つことを願っています。