我在我的應用程序中遇到了令人頭疼的語言環境。所以基本上我的應用程序支持兩種語言,英語和越南語,用戶可以選擇更改要顯示的語言。所以我有一個SettingActivity
這樣的:Android - 應用程序語言環境更改和顯示的方向
public class SettingsActivity extends SherlockPreferenceActivity implements OnPreferenceChangeListener{
private ListPreference langPref;
private SharedPreferences languagepref;
private String language;
private Locale locale;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
languagepref = PreferenceManager.getDefaultSharedPreferences(this);
Configuration config = getBaseContext().getResources().getConfiguration();
language = languagepref.getString("languageToLoad","en");
locale = new Locale(language);
Locale.setDefault(locale);
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
addPreferencesFromResource(R.xml.preferences_login);
langPref = (ListPreference) findPreference("lang_pref");
if (language.equalsIgnoreCase("vi")){
langPref.setValueIndex(1);
}
else{
langPref.setValueIndex(0);
}
langPref.setOnPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
if (key.equals("lang_pref")){
String languageToLoad = (String) newValue;
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",languageToLoad);
editor.commit();
recreate();
}
return false;
}
}
在所有其他活動,我在他們的onCreate
方法補充一點:
SharedPreferences languagepref = PreferenceManager.getDefaultSharedPreferences(this);
Configuration config = getBaseContext().getResources().getConfiguration();
String language = languagepref.getString("languageToLoad","en");
Locale locale = new Locale(language);
Locale.setDefault(locale);
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
現在我的應用程序怪怪的:在SettingActivity
,語言即使無需在活動的清單中添加android:configChanges="locale"
,也可以在我旋轉設備時正常顯示。但是,在其他任何活動中,旋轉設備時,語言會變回英語。我已嘗試在其清單中添加android:configChanges="locale"
,但它不起作用。此外,我已經嘗試了Stackoverflow上找到的每個解決方案,但它們都不適用於我,所以我現在基本上無能爲力。你們誰能幫我指出我在這裏犯的錯誤嗎?請提前做,謝謝。
而不是使用getBaseContext(),嘗試使用getApplicationContext() – TacB0sS 2013-08-15 08:46:15
我已經經歷了與本地化我頭痛:http://android-know-how-to.blogspot.co.il/2013/08 /multi-language-android-application.html – TacB0sS 2013-08-15 08:47:00