我有一个带有FragmentPagerAdapter的ViewPager和五个从我的MainActivity中调用的选项卡。我想动态更改我的应用程序的语言。为此,我在我的onSavedInstanceState
中保存了我的语言偏好:
@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
中显示应用,则所有内容都是用英文写的,甚至是标签的名称。但是当我旋转屏幕时,除了标签的名称之外,一切都是用英语写的,而不是意大利语。溶液
答案 0 :(得分:0)
通过添加到您的清单,您可以在方向更改时停止重新加载应用程序:
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize">
</activity>
和您的MainActivity:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
}
}
或者您可以指定任何其他操作,请阅读有关运行时更改的更多信息:http://developer.android.com/guide/topics/resources/runtime-changes.html
希望这会有所帮助