很多应用开发中,我们需要做多语言版本,安卓在这方面做的很好,下面就写一个简单的例子:
一、项目目录结构
这里对几个关键点进行说明下:
drawable-hdpi 为我们默认的图片存放目录
drawable-en-hdpi 为英文版本对应的图片存放目录,当然ldpi\mdpi\xhdpi 也一样,如果需要,分别按这样的规则创建目录即可。
values 为默认的配置文件目录
values-en 为英文版本的配置文件目录
values 目录下的strings.xml 内容为:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">语言切换</string>
<string name="content">大家好,我叫单红宇。</string>
<string name="content2">AAAAA</string>
</resources>
values-en 目录下的strings.xml 内容为:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Language Switch</string>
<string name="content">Hello everyone, My name is SHANHY.</string>
</resources>
我故意在第一个strings.xml中放了content2,在第二个英文的里面没有放,是为了要说明不同语言的配置文件内容是不需要一一对应的,我们只需要在需要多语言的配置放到按规则命名的文件夹下即可。
drawable-en-hdpi 和 drawable-hdpi 下面放了2个名称相同,内容不同的图片,也是为了要说明,图片也只一样支持多语言的。
下面为MainActivity 代码:
package com.shanhy.example.spinner;
import java.util.Locale;
import android.app.Activity;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/**
* 英语
*
* @param v
* @author SHANHY
* @date 2015年8月28日
*/
public void switchEnglish(View v) {
switchLanguage(Locale.ENGLISH);
}
/**
* 中文
*
* @param v
* @author SHANHY
* @date 2015年8月28日
*/
public void switchChinese(View v) {
switchLanguage(Locale.CHINESE);
}
/**
* 切换语言
*
* @param locale
* @author SHANHY
* @date 2015年8月28日
*/
private void switchLanguage(Locale locale) {
Resources res = getResources();
Configuration config = res.getConfiguration();
DisplayMetrics dm = res.getDisplayMetrics();
Locale currentLocal = config.locale;
config.locale = locale;
res.updateConfiguration(config, dm);
// 如果切换了语言
if (!currentLocal.equals(config.locale)) {
// 这里需要重新刷新当前页面中使用到的资源
onCreate(null);
}
}
}
main.xml 和 AndroidManifest.xml 和我们平常开发是一样的,没有任何特殊的地方。
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/white"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:text="English" android:onClick="switchEnglish"/>
<Button
android:layout_width="wrap_content"
android:textColor="@android:color/black"
android:layout_height="wrap_content"
android:text="中文" android:onClick="switchChinese"/>
<TextView
android:id="@+id/SpinnerResult"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:lineSpacingExtra="10dp"
android:text="@string/content"
android:textColor="@android:color/black"
android:textSize="10pt"
android:textStyle="bold" >
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:lineSpacingExtra="10dp"
android:text="@string/content2"
android:textColor="@android:color/black"
android:textSize="10pt"
android:textStyle="bold" >
</TextView>
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:background="@drawable/testimg" />
</LinearLayout>