Android изменить локальную конфигурацию не работает
Я создаю приложение, которое поставляется на двух языках, используя настройку активности, где пользователь может изменить язык. Как только пользователь выбрал какой-либо язык, я хочу сохранить его / ее выбор, чтобы при повторном запуске приложения появился новый язык. Я сделал все, что связано с макетами на разных языках и в разных ориентациях.
Моя проблема
когда я запускаю приложение, оно всегда запускается в English
язык, хотя я печатаю язык локали и результат Arabic
,
намек
когда пользователь меняет язык с действия по настройке и нажимает "Сохранить", приложение отлично работает на новом языке. К сожалению, при перезапуске приложения оно не запускается на этом новом языке.
Мой код
Tags.java - класс, который содержит только три строки:
public class Tags {
public final static String LANGUAGE = "Language";
public final static String ENGLISH_LANGUAGE = "en";
public final static String ARABIC_LANGUAGE = "ar";
}
Всплывающее действие - действие, с которого запускается приложение:
someData = getSharedPreferences(filename, 0);
android.content.SharedPreferences.Editor editor = someData.edit();
if (!someData.contains(Tags.LANGUAGE)) {
editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
String currentLanguage = someData.getString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
Setting.setLanguage(currentLanguage);
Log.e("currnetLanPHone", Setting.getLanguage());
if (currentLanguage.equalsIgnoreCase(Tags.ENGLISH_LANGUAGE)) {
Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
} else {
Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
}
editor.commit();
Это смущает меня, потому что, как я объяснил ранее, язык приложения изменяется, и новые макеты загружаются, когда я меняю язык с Setting activity
,
Я уверен, что вы попросите меня дать вам код Setting activity
чтобы сравнить то, что я сделал в этом упражнении с всплеском. Этот код выглядит следующим образом:
Настройка деятельности
if (s_language.getSelectedItem().toString().equalsIgnoreCase("English")) {
editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
Locale.setDefault(locale);
Log.e("Inside", Tags.ENGLISH_LANGUAGE);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
editor.putString(Tags.LANGUAGE, Tags.ARABIC_LANGUAGE);
Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
Locale.setDefault(locale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
Setting.setLanguage(Tags.ARABIC_LANGUAGE);
}
editor.commit();
Код довольно прост, я использовал Spineer s_language
из двух значений.
Проблема может заключаться в том, что при настройке активности, когда пользователь нажимает save
, Setting
деятельность закончена в splash
активность, я проверяю язык в oncreate
функции, прежде чем продолжить деятельность и завершить ее после выполнения ряда шагов. Я не думаю, что завершение упражнения является проблемой, но я просто сказал вам, чтобы прояснить образ.
Как я могу решить эту проблему?