实习期间,师父要求做app的中英文切换,就顺便记录了下。
一、AndroidManifest.xml文件(清单文件)
在每个要切换语言的Activity下面添加:
android:configChanges="locale"
17
百度上都是这么写的,然而我并没有用到。
二、创建一个英文的strings.xml文件,目录名为values-en
or
values/strings.xml这个为默认语言,如果values-en目录下的strings.xml不存在,那英文就会选取默认语言。
1 23 language 4Settings 5updating.. 6
三、核心代码
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。
也可以调用此类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
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("中文"))