Android - 支持ViewPager中的多语言应用

时间:2015-05-05 22:36:13

标签: android android-viewpager locale multilingual screen-rotation

我有一个带有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中显示应用,则所有内容都是用英文写的,甚至是标签的名称。但是当我旋转屏幕时,除了标签的名称之外,一切都是用英语写的,而不是意大利语。溶液

1 个答案:

答案 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

希望这会有所帮助