實習期間,師父要求做app的中英文切換,就順便記錄了下。
一、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。
也可以調用此類

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("中文"))