6

我正在使用 Android Lint 检查我翻译的字符串。我有一个字符串

<string name='status_bar_text_remaining_capacity'>%d%% remaining</string>

林特报告这个

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()这是有效的字符串。你知道有什么问题吗?

4

3 回答 3

1

这是最近修复的 lint 中的错误; https://android-review.googlesource.com/#/c/46741/1

该修复程序位于 ADT 21.0.1 中。

于 2012-12-27T03:15:48.920 回答
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);

我希望我有所帮助

于 2020-04-20T21:31:07.377 回答
-1

使用 lint 版本 21 在 Windows 上检查了相同的情况,我没有收到任何错误。

于 2012-12-19T12:55:41.340 回答