Android Asset Packaging Tool(aapt
)在其最新版本中已变得非常严格,现已用于所有 Android版本。因为不再允许非位置格式说明符,所以会生成您所得到的aapt-error 。
这里有一些想法,您可以如何在资源字符串中包含%符号。
如果您的字符串中不需要任何格式说明符或替换,则只需使用该formatted
属性并将其设置为false
:
<string formatted="false">%a + %a == 2%a</string>
在这种情况下,该字符串不用作的格式字符串,Formatter
因此您不必转义%符号。结果字符串为“%a +%a == 2%a”。
如果省略该formatted="false"
属性,则该字符串将用作格式字符串,并且必须转义%符号。使用double-%可以正确完成此操作:
<string>%%a + %%a == 2%%a</string>
现在aapt
不会给您任何错误,但是如果Formatter
调用a而没有任何格式参数,则根据您的使用方式,结果字符串可以是“ %% 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和代码,很难说出您的问题到底是什么,但是希望这可以帮助您更好地理解机制。