我正在使用Android Lint检查我翻译的字符串。我有一个字符串
<string name='status_bar_text_remaining_capacity'>%d%% remaining</string>
Lint报告此
res/values/strings.xml:91: Error: Format string 'status_bar_text_remaining_capacity' is not a valid format string so it should not be passed to String.format [StringFormatInvalid]
<string name='status_bar_text_remaining_capacity'>%d%% remaining</string>
据我了解String.format()
的文档,这是有效的字符串。你知道出了什么问题吗?
答案 0 :(得分:2)
这是最近修复的lint中的一个错误; https://android-review.googlesource.com/#/c/46741/1
此修复程序位于ADT 21.0.1。
答案 1 :(得分:0)
使用lint版本21检查窗口上的相同情况,我没有错误。
答案 2 :(得分:0)
那是因为您必须使用getString(int resID, Obj... args)方法而不是String.format()。
该警告是因为getString有其自己的使用字符串参数的方式。因此,每个%int xml字符串都是解析器的特殊符号,告诉它将有一个整数来通知位置。该位置由1$
,2$
等表示,并进入说明符(%
和s
)中。例如
Captured the IMEI: %s
注意:
<string name="msg_success_captured_imei">Captured the IMEI: %1$s</string>
如果您的字符串资源具有更多的参数,则只需增加定位器:
<string name="msg_success_captured_imei">Captured the IMEI: %1$s %2$s %3$s</string>
您可以使用其他args说明符,但必须遵循以下顺序:
<string name="msg_success_captured_imei">This is a test %1$s %2$d </string>
现在,您只需使用getString
并传递多余的参数,例如:
getString(R.string.msg_success_captured_imei,mMyVar1, myVar2, myVar3);
希望我能帮上忙