一、AndroidManifest.xml文件(清单文件)
在每个要切换语言的Activity下面添加:
android:configChanges="locale"
1 <activity 2 android:name="com.activity.RepairActivity" 3 android:configChanges="locale" 4 android:launchMode="singleTop" 5 android:screenOrientation="portrait" 6 android:windowSoftInputMode="adjustPan" > 7 </activity>
百度上都是这么写的,然而我并没有用到。
二、创建一个英文的strings.xml文件,目录名为values-en
or
values/strings.xml这个为默认语言,如果values-en目录下的strings.xml不存在,那英文就会选取默认语言。
1 <?xml version="1.0" encoding="utf-8"?> 2 <resources> 3 <string name="app_name">language</string> 4 <string name="action_settings">Settings</string> 5 <string name="alert_data_init">updating..</string> 6 </resources>
三、核心代码
1 /**
2 * 刷新语言
3 */
4 public void updateActivity(String sta) {
5
6 // 本地语言设置
7 Locale myLocale = new Locale(sta);
8 Resources res = getResources();// 获得res资源对象
9 DisplayMetrics dm = res.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
10 Configuration conf = res.getConfiguration();// 获得设置对象
11 conf.locale = myLocale;// 简体中文
12 res.updateConfiguration(conf, dm);
13 // startActivity((new Intent(this, TabActivity.class)));
14 // this.finish();
15 }
String sta= getResources().getConfiguration().locale.getCountry() //用于判断当前的语言
Locale.getDefault().getLanguage() //语言:取到的比如中文为zh,英文为en,日文为ko;
Locale.getDefault().toString()//具体的类别:比如繁体为zh_TW,简体为zh_CN。英文中有en_GB;日文有ko_KR。
把需要切换的Strings.xml对应的语言,传入到 updateActivity(String sta) 方法.....
也可以调用此类
public class LanguageSettings {
private static LanguageSettings language = null;
private String currentLanguage = "zh";
private LanguageSettings() {
}
public static LanguageSettings getInstance() {
if (language == null) {
language = new LanguageSettings();
} else {
}
return language;
}
public String getCurrentLanguage() {
return currentLanguage;
}
public void switchCurrentLanguage() {
if (currentLanguage.equals("zh")) {
currentLanguage = "en";
} else {
currentLanguage = "zh";
}
}
}
1 // 切换成英文
2 if (LanguageSettings.getInstance().getCurrentLanguage()
3 .equals("zh")) {
4 updateActivity("en");
5 LanguageSettings.getInstance().switchCurrentLanguage();
6 } else {
7 // 切换成中文
8 updateActivity("zh");
9 LanguageSettings.getInstance().switchCurrentLanguage();
10 }
LanguageSettings.getInstance().getCurrentLanguage() 给变量动态赋值的标识列,用于判断!(采用单例模式)
我自己写的是这样的:
private void checkLanguage() {
// 界面出来前判断好
String aString = SystemArgs.LANGUAGE;
System.out.print(aString);
System.out.print(SystemArgs.LANGUAGE);
String language = pref.getString(SystemArgs.LANGUAGE, "Chinese");
System.out.print(language);
Log.i("a", language);
try {
if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))
chooseLanguage(Locale.CHINA);
else if (language.equalsIgnoreCase("English")
|| language.equals("英文"))
chooseLanguage(Locale.US);
} catch (Exception e) {
// Log.i("error", "语言选择出错");
}
}
private void chooseLanguage(Locale locale) {
Resources resources = getResources();// 获得res资源对象
Configuration config = resources.getConfiguration();// 获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
config.locale = locale; // 语言
resources.updateConfiguration(config, dm);
}
对于图片的更改,需要自己在oncreate里判断语言,然后显示什么图片
四、其他的记录
对ListPreference的语言选项设置默认值
try {
if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))
CLanguage_ListPreference.setValueIndex(0);
else if (language.equalsIgnoreCase("English")
|| language.equals("英文"))
CLanguage_ListPreference.setValueIndex(1);
} catch (Exception e) {
// Log.i("error", "语言选择出错");
}
String language = defaultSharedPreferences.getString(
SystemArgs.LANGUAGE, "中文");
ImageView button = null;
// 图片要自己去判断语言选择
if (language.equalsIgnoreCase("Chinese") || language.equals("中文"))