После перезапуска приложения не сохраняется выбранный язык
В моём приложении я хочу добавить функцию смены языка, независимо от глобального, для этого я добавил кнопки, на который назначил следующий функционал.
cv_language_en.setOnClickListener(v -> {
Locale locale = new Locale("en");
Locale.setDefault(locale);
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
onBackPressed();
});
cv_language_ru.setOnClickListener(v -> {
Locale locale = new Locale("ru");
Locale.setDefault(locale);
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
onBackPressed();
});
cv_language_ua.setOnClickListener(v -> {
Locale locale = new Locale("uk");
Locale.setDefault(locale);
Configuration config = getBaseContext().getResources().getConfiguration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
onBackPressed();
});
Всё работает, только вот при перезапуске приложения, выбранный язык не сохраняется и запускается на системном, как сделать так что бы после перезапуска приложения, язык который выбрал пользователь, сохранялся?
Ответы (1 шт):
Автор решения: Karp
→ Ссылка
По совету @woesss я использовал SharedPreferences, но немного изменил структуру кодировки.
public class ActivityLanguage extends BackStackActivity {
CardView back_lang, cv_language_en, cv_language_ru, cv_language_ua;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadLocale();
setContentView(R.layout.activity_language);
back_lang = findViewById(R.id.back_language);
back_lang.setOnClickListener(v -> onBackPressed());
cv_language_en = findViewById(R.id.cv_language_en);
cv_language_ru = findViewById(R.id.cv_language_ru);
cv_language_ua = findViewById(R.id.cv_language_ua);
cv_language_en.setOnClickListener(v -> {
setLanguage("en");
onBackPressed();
});
cv_language_ru.setOnClickListener(v -> {
setLanguage("ru");
onBackPressed();
});
cv_language_ua.setOnClickListener(v -> {
setLanguage("uk");
onBackPressed();
});
}
public void setLanguage(String language) {
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration configuration = new Configuration();
configuration.locale = locale;
getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
SharedPreferences.Editor editor = getSharedPreferences("Settings", MODE_PRIVATE).edit();
editor.putString("My_Lang", language);
editor.apply();
}
public void loadLocale() {
SharedPreferences preferences = getSharedPreferences("Settings", Activity.MODE_PRIVATE);
String language = preferences.getString("My_Lang", "");
setLanguage(language);
}
@Override
public void onBackPressed() {
Intent intent = new Intent(ActivityLanguage.this, ActivitySettings.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.fragment_fade_enter, R.anim.fragment_fade_exit);
}
}