支持不同的语言
一个比较好的习惯就是把UI字符串从代码里提取出来,放在一个单独的文件里。在安卓上,很容易做到这一点,在每个工程目录下,都有一个单独的资源文件夹专门用来存放这些资源的。
如果你使用了安卓SDK工具创建了一个工程(前面介绍过如何使用Eclipse创建工程),在工程的根目录下你就会发现一个 res/ 文件夹。这个res文件夹以及里面的各层目录存放了不同的类型资源。有一个默认的文件叫 res/values/strings.xml,里面存放了你需要用到的字符串资源。
创建语言包和字符串文件
为了支持更多的语言,在res/ 目录下创建文件夹 “values-<国家码>”。例如, values-zh/ ,这个文件夹包含有国家码 “zh”,这样,当在手机的设置里,将语言更改为中文时,安卓系统就会为你的app加载这个目录下的资源,例如字符串等。
当你决定想支持哪些语言时,就可以在res/目录下创建相应的资源子文件夹和字符串资源文件。例如:
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
在上面的各个目录下的strings.xml,你可以为不同的语言添加字符串资源。
在运行时,安卓系统会根据手机的语言设置来调用相应的字符串资源。
例如,下面就是一些为不同语言准备的字符串资源。
英语(默认语言), /values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">My Application</string>
<string name="hello_world">Hello World!</string>
</resources>
西班牙语,/values-es/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Mi Aplicación</string>
<string name="hello_world">Hola Mundo!</string>
</resources>
汉语,/values-zh/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">我的应用</string>
<string name="hello_world">你好 世界! </string>
</resources>
使用字符串资源
你可以在代码中或者在XML文件中引用这些字符串资源。
在代码中,你可以使用R.string.<string_name>语法形式引用某个字符串。有很多方法都这接受这样的参数形式。
例如:
// 获得某个字符串对象
String hello = getResources().getString(R.string.hello_world);
// 或者将某个字符串ID作为参数传给方法
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);
在XML文件中引用的话,可以使用这样的形式@string/<string_name>赋值给某个属性,当然前提是这个属性接受字符串值。
例如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />