编辑strings.xml
的时候
1 |
<string name="myurl">http://code.dd.com/rr?q=%rr.55</string> |
或者
1 |
<string name="message_content'>恭喜您你获得%1s 积分,占比%2s %</string> |
提示下面的错误
1 2 3 4 |
Multiple annotations found at this line: - error: Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute? - error: Unexpected end tag string |
出现这个错误的原因主要是因为strings
字串中包含百分号(%)
,
有几种方式解决
1.用两个百分号表示一个百分号即
1 2 3 |
<string name="myurl">http://code.dd.com/rr?q=%%rr.55</string> <string name="message_content">恭喜您你获得%1s 积分,占比%2s %%</string> |
2.用转义符表示
1 |
<string name="myurl">http://code.dd.com/rr?q=\%rr.55</string> |
二:无需格式化
根据错误提示可知,如果字符串无需格式化,可在<string>
标签上增加属性:formatted="false"
,即
1 |
<string name="myurl" formatted="false">http://code.dd.com/rr?q=%rr.55</string> |
三:关于上面问题的延伸
如果你需要使用String.format(String, Object...)
来格式化你的字符串,你可以把格式化参数放在你的字符串中,参见下面的例子:
1 |
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string> |
在这个例子中,这个格式化的字符串有2
个参数, %1$s
是个字符串%2$d
是个浮点数,你可以在你的程序中按照下面的方法来根据参数来格式化字符串:
1 2 3 |
Resources res = getResources(); String text = String.format(res.getString(R.string.welcome_messages), username, mailCount); |
目前Android
的SDK
已经支持直接格式化字符串,不需要使用String.format(String, Object...)
,如下
1 2 3 |
Resources res = getResources(); String text = res.getString(R.string.welcome_messages, username, mailCount); |
那么根据例子上说的我需要把%s
换成%1$s
才行了,修改后编译通过,程序成功启动。