我有一个字符串数组,其中使用了%符号。使用%的正确格式是%。当数组中有多个%它给出了这个错误。
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是生成的,因为它不再允许非位置格式说明符。
下面是一些如何在资源字符串中包含%-符号的想法。
如果你在字符串中不需要任何格式说明符或替换,你可以简单地使用格式化属性并将其设置为false:
<string formatted="false">%a + %a == 2%a</string>
在这种情况下,字符串不会用作Formatter的格式字符串,因此您不必转义%-symbols。结果字符串是“%a + %a == 2%a”。
如果省略了formatting ="false"属性,则字符串将被用作格式化字符串,并且必须转义%-symbols。使用double-%是正确的:
<string>%%a + %%a == 2%%a</string>
现在aapt不会给你任何错误,但取决于你如何使用它,如果Formatter被调用而没有任何format参数,结果字符串可以是"%%a + %%a == 2%%a":
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和代码,很难说出您的问题究竟是什么,但希望这有助于您更好地理解机制。
Android资产打包工具(aapt)在其最新版本中变得非常严格,现在用于所有Android版本。您得到的aapt-error是生成的,因为它不再允许非位置格式说明符。
下面是一些如何在资源字符串中包含%-符号的想法。
如果你在字符串中不需要任何格式说明符或替换,你可以简单地使用格式化属性并将其设置为false:
<string formatted="false">%a + %a == 2%a</string>
在这种情况下,字符串不会用作Formatter的格式字符串,因此您不必转义%-symbols。结果字符串是“%a + %a == 2%a”。
如果省略了formatting ="false"属性,则字符串将被用作格式化字符串,并且必须转义%-symbols。使用double-%是正确的:
<string>%%a + %%a == 2%%a</string>
现在aapt不会给你任何错误,但取决于你如何使用它,如果Formatter被调用而没有任何format参数,结果字符串可以是"%%a + %%a == 2%%a":
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和代码,很难说出您的问题究竟是什么,但希望这有助于您更好地理解机制。