Android Lint Check - StringFormatInvalid:%d %%还剩下什么问题?

时间:2012-12-19 09:52:52

标签: android lint

我正在使用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()的文档,这是有效的字符串。你知道出了什么问题吗?

3 个答案:

答案 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);

希望我能帮上忙