Android XML Percent Symbol(百分符号)
Android XML Percent Symbol(百分符号)
我有一个字符串数组,其中使用了 %
符号。使用 %
的正确格式应该是 %
。如果我在该数组中有一个包含多个 %
的字符串,它会给我一个错误。
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 where is expected
admin 更改状态以发布 2023年5月22日
为了让应用程序使用来自资源的格式化字符串,您应该更正您的xml。 例如,
Your App name, ver.%d
应该被替换为
Your App name, ver.%1$d
您可以点击这里查看详细信息。
Android资源打包工具 (aapt
) 在最新版本中变得非常严格,现在适用于所有Android版本。你收到的 aapt 错误是由于它不再允许 非定位格式说明符。
以下是一些关于如何在资源字符串中包含 %-符号的方法。
如果你的字符串中不需要任何格式说明符或替换,你可以简单地使用 formatted
属性,并将其设置为 false
:
%a + %a == 2%a
在这种情况下,该字符串不作为 Formatter
的格式字符串使用,因此你不必转义 %- 符号。得到的字符串是 "%a + %a == 2%a"。
如果你省略 formatted="false"
属性,则该字符串被用作格式字符串,你必须用双重百分号进行转义:
%%a + %%a == 2%%a
现在,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和代码的情况下,很难说你的问题是什么,但是希望这能帮助你更好地理解机制。