2016-01-04 1 views
1

Я использую этот метод ниже, чтобы изменить язык приложения, передав код языка как строку.
Когда я меняю ориентацию экрана, язык зависит от языка по умолчанию, и все представления тоже сбрасываются.Сохраните язык при повороте экрана

public String setLocale(String lang) { 
    Locale myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, Login.class); 
    startActivity(refresh); 
    finish(); 
    return lang; 
} 

Я пытался использовать onSaveInstanceState и onRestoreInstanceState, но я не знаю, как сделать все эти методы работают вместе.

+3

Сохраните текущий язык в постоянном хранилище и реализуйте метод onOrientationChanged в своем коде и в нем проверьте соответствующий язык и соответствующим образом обновите –

+1

Сохраните текущий язык в SharedPreferences и когда ориентация экрана изменила язык заданий из SharedPreferences Также проверьте: http: // stackoverflow .com/questions/2324418/android-принудительный-locale-reset-on-orientation-changes- –

ответ

0

Используя общие настройки, вы можете сохранить lanuage и получить сохраненное значение при изменении ориентации экрана.

public String setLocale(String lang) { 
    Locale myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, Login.class); 
    startActivity(refresh); 
    finish(); 
    // save shared preference here or later, your choice. 
    return lang; 
} 

Код для создания и сохранения общих предпочтений.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
SharedPreferences.Editor nameEditor = preferences.edit(); 
nameEditor.putString("saved_lang", lang); 
nameEditor.commit(); 

Код для получения значения общих предпочтений.

//To get language when screen changes. 
String lang = preferences.getString("saved_lang", ""); 

Вы можете использовать same principal to save other values and settings.

+0

Прошу прощения, я опубликовал этот ответ на другой совершенно другой вопрос прошлой ночью! –