Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1107090
  • 博文数量: 276
  • 博客积分: 8317
  • 博客等级: 少将
  • 技术积分: 2329
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-12 08:17
个人简介

http://ads.buzzcity.net/adpage.php?partnerid=40096

文章分类

全部博文(276)

文章存档

2013年(1)

2012年(38)

2011年(102)

2010年(85)

2009年(45)

2008年(5)

分类: 嵌入式

2010-12-28 13:12:32

谷歌正式放出了Android2.3,抱着尝鲜的心态马上更新了ADT和Android SDK,更新后发现自己2.2下编译的很好的项目出现了问题,错误详细内容为:

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

反复检查后发现是 %s 导致编译失败,

去Google的Android开发者讨论组查看关于这个问题的讨论(http://http//groups.google.com/group/android-developers/browse_thread/thread/017d92dd987a8682) 后看到了Xavier Ducrohet大神的回复,说这是由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android最新的开发文档的描述String的部分,已经说明了 (http://developer.android.com/guide/topics/resources/string-resource.html#String)如何去设置 %s 等符号,下面是文档片段:

If you need to format your strings using String.format(String, Object...) , then you can do so by putting your format arguments in the string resource. For example, with the following resource:

如果你需要使用 String.format(String, Object...) 来格式化你的字符串,你可以把格式化参数放在你的字符串中,参见下面的例子:

Hello, %1$s! You have %2$d new messages.

In this example, the format string has two arguments: %1$s is a string and %2$d is a decimal number. You can format the string with arguements from your application like this:

在这个例子中,这个格式化的字符串有2个参数, %1$s是个字符串 %2$d 是个浮点数,你可以在你的程序中按照下面的方法来根据参数来格式化字符串:

Resources res = getResources();

String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

那么根据例子上说的我需要把%s换成%1$s才行了,修改后编译通过,程序成功启动。

问题补充:

有读者问如何在中使用%号

有两个办法可供选择

1.用%%来表示1个%,和转意符号 \ 的用法相同

 
2.如果你的字符串不需要格式化,可以在你的% test % 即可

最后稍微延伸一下这个格式化变化的原因: 大神()觉得当前Java的格式化字符串方式可读性不好(我也有同感),然后就写了篇博文来提出他认为的最好的方式,


显然,Android开发团队认可了他的建议

阅读(1162) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-31 10:17:48

Cool Links