у меня есть одно действие, и в onCreate я загружаю язык из настроек и устанавливаю языковой стандарт, подобный этому:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);
Configuration config = new Configuration();
config.locale = newLocale;
final Resources res = getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}
я также переопределяю onConfigurationChanged
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
Locale newLocale = new Locale(lang);
Locale.setDefault(newLocale);
Configuration config = new Configuration();
config.locale = newLocale;
final Resources res = getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
}
у меня есть ViewPager с FragmentPagerAdapter и тремя вкладками на Android 2.3.7. проблема в том, что иногда при переключении вкладок языковой стандарт приложения возвращается к английскому, поэтому с этого момента в пользовательском интерфейсе используются смешанные языки. я всегда создаю новые фрагменты для вкладок в методе адаптера getItem(). если я поверну устройство, язык снова будет правильным.
Я также пытался поместить android:configChanges="locale" в манифест и не переопределять onConfigurationChanged(), но результат тот же.
Хуже всего то, что это не воспроизводимо на 100%, это происходит только несколько раз, и у меня также есть отчеты об этом от пользователей. как только приложение запустится и оно не изменит локаль после переключения нескольких вкладок, оно будет работать правильно до выхода.