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'是否等於我想要的區域設置,現在它像一個魅力工作! –