FAQ_17 android string.xml 里面的 %
来源:互联网 发布:科贝尔 知乎 编辑:程序博客网 时间:2024/06/06 01:49
有这样一种情形,不知道你是否遇到过。
我们要将 android 资源国际化,但是有时候还需要动态的改变字符串的内容,你不可能把所有的情况都写到 string.xml
里面,那怎么办?
假设,现在我们做了一款 app,但是检测到有些设备不支持我们 app 的某些功能,这个时候你需要提示用户:
您的手机暂时没有 ×× ,暂时您无法使用我们的该项功能!
解决这个问题,android 为我们提供了方便的方式:可以使用 xliff 或者不使用 xliff.
Xliff 是 XML Localization Interchange File Format 的缩写,中文名为 XML 本地化数据交换格式。
还是举几个例子吧,直接简单的说明问题。
1. 不使用 xliff
在 res/values/string.xml:
<string name="info">i am is %1$d ,and myname is %2$s</string>
在代码中:
Context mContext;
String info = mContext.getResources().getString(R.string.info, 10, "mark");
输出信息:i am is 10 ,and myname is mark
可以看出,%1$d 被 10 替代,%2$s 被 mark 替代。此时你会问,为什么要标注1、2,如果都写 1,会怎么样?
测试发现,写 1 那麽输出信息为:i am is 10 ,and myname is 10.
想更加深入的了解这个问题,可以参考 getString 源码。
public String getString(int id, Object... formatArgs) throws NotFoundException {
String raw = getString(id);
return String.format(mConfiguration.locale, raw, formatArgs);
}
其中,Object... formatArgs 表示一种数据类型形式,可以参考:
http://blog.csdn.net/androidbluetooth/article/details/6593632
2. 使用 xliff
在 res/values/string.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="info">i am is <xliff:g>%1$d</xliff:g> ,and myname is <xliff:g>%2$s</xliff:g></string>
</resources>
注意:xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" 要声明。
然后在代码中,可以像上面那样去使用了。效果一样的。
如果想更加人性化一点,可以这样写:
<string name="info">i am is <xliff:g id="age" example="20">%1$d</xliff:g>, and myname is <xliff:g id="name", example="jhon">%2$s</xliff:g></string>
id、example 只是表示说明。
那么,% 默认是格式化字符串的,如果想在 string.xml 里面使用 % 怎么办?
解决办法
1. 用%%来表示 1 个%,不要使用转意符号 \ ,没有作用!
<string name="value_perc">30%%</string>
2. 增加属性:formatted="false"
<string name="value_perc"formatted="false">30%</string>
- FAQ_17 android string.xml 里面的 %
- Android开发中的那些坑之-------------string.xml里面的通配符
- android获取string里面的值
- 在string.xml文件里面用%*的使用
- 在string.xml文件里面用%*的使用
- 新版android project 里面的activity_main.xml和fragment_main.xml
- string里面的intern()
- Lambda FAQ_17.Java的集合要去向何方
- 注意android xml里面的id和值得区别
- android 中Xml里面的id重名问题
- android 中Xml里面的id重名问题
- Android Layout xml文件里面的知识小结
- Android 中Xml里面的id重名问题
- 【Android】xml文件里面出现unbound prefix的问题
- android 中Xml里面的id重名问题
- android:textAppearance xml布局里面设置文字的外观:
- 【Android】xml文件里面出现unbound prefix的问题
- android 中Xml里面的id重名问题
- QQ拼音输入法如何直接切换简繁体
- 等待队列一
- 高级软件开发工程师 | 流媒体服务器开发工程师
- Failed to connect to the specified server. Server library could not be loaded
- iOS 简单画板
- FAQ_17 android string.xml 里面的 %
- VC绘制位图--BeginPaint()与GetDC()的区别
- linux启动之前那些事
- 等待队列二
- Linux加载模块时:disagrees about version of symbol struct_module
- 计算几何算法概览——算法篇之位置关系
- mysqlsla的安装与使用
- 服务器未能识别http标头SOAPAction的值
- Java_JDK1.6 的新特性 (Java DB 和 JDBC 4.0)