在更新SDK以后,发现在strings定义:<string name="fx_speed_order_lc_range_text">指定可能範囲(%s円-%s円)</string> 会编译不通过,但是有时候也会通过,纳闷,于是查了下解决方法转载内容如下:

去Google的Android开发者讨论组查看关于这个问题的讨论后看到了Xavier Ducrohet大神的回复,说这是由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android最新的开发文档的描述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...) 来格式化你的字符串,你可以把格式化参数放在你的字符串中,参见下面的例子:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

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才行了,修改后编译通过,程序成功启动。

问题补充:

有读者问如何在<string></string>中使用%号

有两个办法可供选择

1.用%%来表示1个%,和转意符号 \ 的用法相同 2.如果你的字符串不需要格式化,可以在你的<string 标签上增加一个属性:formatted="false"例如 <string name="test"formatted="false">% test %</string> 即可

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

http://bobkerns.typepad.com/bob_kerns_thinking/2010/12/dear-java-better-text-formatting-please.html

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


更多相关文章

  1. Android解决读取txt文件中文乱码问题,reload和cnvert区别,按行读取
  2. Resources Types - String(android String 资源 你所不知道的 )
  3. NDK提供的共享库(Prebuilt)
  4. 【Cocos2dx通信(Http&Socket)相关编译到Android细节总结】编译加
  5. Android(安卓)Studio build.gradle 中配置 cmake,及各 arguments
  6. android集成 ijkplayer Ijkplayer集成使用方案 + demo
  7. Android(安卓)APK的编译及反编译
  8. Android怎么解决不同版本SDK的兼容性问题
  9. Android实战技巧之十一:Android(安卓)Studio和Gradle

随机推荐

  1. Android(安卓)adb shell
  2. Binder子系统之调试分析(一)
  3. Android魔术(第五弹)—— 一步步实现滑动折
  4. Android输入设备处理流程
  5. Android(安卓)Oss上传文件简单使用
  6. Android 多级菜单联动操作
  7. Android: NullPointerException when usi
  8. 详解Android中fragment和viewpager的那点
  9. 一步一步学Android ROM开发(一)——修改现
  10. ubuntu 下的android环境部署