我有一个带有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
中显示应用程序,则所有内容均以英文写入,即使是标签的名称也是如此。但是当我旋转屏幕时,除了选项卡的名称以外,所有内容都以英文书写,而是以意大利语显示。解决方案?
是问题只有当你旋转手机时? –
是的,只有当屏幕旋转时... –