android 语言设置(5)
values/strings.xml与xml/english.xml的内容是相同的;values-zh-rCN/strings.xml与xml/chinese.xml的内容也是相同的。出现这样的冗余是因为生成APK时values下的内容都打到rasc去了,读取不了了。
自己实现语系的转换需要考虑到:
3.1 R.xxxxx.id与对应语系中文本串的对应(需要特别考虑到R.array.string字符串数组)。
3.2 解析xml。
3.3 设置语系后,所有界面元素的手动刷新。
在xml中声明一个string是这个的格式:
view plaincopy to clipboardprint?
<string name="app_name">语言应用</string>
<string name="app_name">语言应用</string> 对应R文件会生成一个id指代该string
view plaincopy to clipboardprint?
public static final class string {
public static final int app_name=0x7f050001;
}
public static final class string { public static final int app_name=0x7f050001; }
3.1的问题就是如何实现id与string的匹配,解决方法为:
view plaincopy to clipboardprint?
Resources res = context.getResources();
String pkg = context.getPackageName();
String tag = "app_name";
int idTag = res.getIdentifier(tag, "string", pkg);
Resources res = context.getResources(); String pkg = context.getPackageName(); String tag = "app_name"; int idTag = res.getIdentifier(tag, "string", pkg); 3.2 解析XML
这儿要用到一个新的工具了:XmlResourceParser,解析过程有点绕,但比SAX简单些。具体细节见LanguageApp_Sodino工程中的代码吧。
3.3 手动刷新界面。
要获取所有涉及到语系更新组件的索引逐一更新,体力活儿,细心点花点力气也可实现。
详细实现过程见下面三个工程中:
LanguageApp_APICheat
LanguageApp_Reflection
LanguageApp_Sodino
(PS:不要问我为什么下载的工程在IDE中为什么无法直接使用,为什么打开是乱码红叉一大堆,既然是程序员,遇到问题是不是也该自己多思考思考呢。)
相关新闻>>
- 发表评论
-
- 最新评论 更多>>