Androidassets资源 打包工具(aapt
)已经变成very strict in its latest release,现在用于all个Android版本.您得到的AAPT-ERROR是生成的,因为它不再允许non-positional format specifiers.
下面是一些如何在资源字符串中包含%-符号的方法.
如果字符串中不需要任何格式说明符或替换,只需使用formatted
属性并将其设置为false
:
<string formatted="false">%a + %a == 2%a</string>
在这种情况下,字符串不会用作Formatter
的格式字符串,因此不必转义符号.结果字符串为"%a+%a==2%a".
如果省略formatted="false"
属性,该字符串将用作格式字符串,并且必须转义符号.这是正确的使用双-%:
<string>%%a + %%a == 2%%a</string>
现在aapt
不会给您任何错误,但根据您如何使用它,如果在没有任何格式arguments的情况下调用Formatter
,则结果字符串可以是"%%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和代码,很难说出您的问题到底是什么,但希望这能帮助您更好地理解机制.