0

У меня есть ViewPager с FragmentPagerAdapter и пять вкладок, которые вызывается из моей 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

является проблемой em только при повороте телефона? –

+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' равным моему желаемому языку, и теперь он работает как шарм! –

Смежные вопросы