我有一個帶有FragmentPagerAdapter的ViewPager和從我的MainActivity調用的五個選項卡。我想動態改變我的應用程序的語言。要做到這一點,我救了我的語言偏好設置,我onSavedInstanceState
這樣的:Android - 在ViewPager中支持多語言應用程序
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String predefined_lang = prefs.getString(LANGUAGES, "error");
String sub_lan = predefined_lang.substring(0,2).toLowerCase();
outState.putString(LANG, sub_lan);
System.out.println(">>saveinstance"+predefined_lang);
}
,比我檢索onRestoreInstanceState
語言:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Configuration configuration = getResources().getConfiguration();
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
//System.out.println(savedInstanceState.getString(LANG));
//configuration.locale = new Locale(savedInstanceState.getString(LANG));
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String predefined_lang = prefs.getString(LANGUAGES, "error");
String sub_lan = predefined_lang.substring(0,2).toLowerCase();
configuration.locale = new Locale(savedInstanceState.getString(LANG));
getResources().updateConfiguration(configuration, displayMetrics);
System.out.println(">>onrestore"+savedInstanceState.getString(LANG));
}
所以我儘量避免所選擇的語言沒有改變再次以設備的默認語言顯示。 實際上,所有字符串資源都以正確的語言顯示,但viewPager的選項卡名稱除外。例如:
我有這五個標籤:
| tab1 - | - tab2 - | - tab3 - | - tab4 - | - tab5 |
如果手機的默認語言爲Italian
,但我選擇在English
中顯示應用程序,則所有內容均以英文寫入,即使是標籤的名稱也是如此。但是當我旋轉屏幕時,除了選項卡的名稱以外,所有內容都以英文書寫,而是以意大利語顯示。解決方案?
是問題只有當你旋轉手機時? –
是的,只有當屏幕旋轉時... –