0

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

+0

是问题只有当你旋转手机时? –

+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

希望这有助于

+0

在我的清单中它已经存在这行代码:'android:configChanges =“orientation | locale”'... –

+0

没关系,你把它放在那里MainActivity中有关定向的其他代码? –

+1

好的非常感谢你!我已经删除了'onSavedInstanceState'和'onRestoreInstanceState'方法,而不是这些我添加'onConfigurationChanged'方法,我检查'newConfig.locale'是否等于我想要的区域设置,现在它像一个魅力工作! –