#android #android-studio #android-layout #localization #android-configchanges
#Android #android-studio #android-макет #локализация #android-изменения конфигурации
Вопрос:
Я хочу изменить строку при изменении локали приложения
есть фрагмент профиля
@Override
public void onClick(View v) {
Intent intent = null;
switch (v.getId()) {
case R.id.changeLanguageButton:
if (PrefManager.getLocale(getActivity()).equals("en")) {
setLocale("ar");
} else {
setLocale("en");
}
break;
}
}
public void setLocale(String lang ) {
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
config.setLayoutDirection(locale);
getActivity().getBaseContext().getResources().updateConfiguration(config, getActivity().getApplication().getResources().getDisplayMetrics());
PrefManager.saveLocale(getActivity(), lang);
Intent intent = new Intent(getActivity(), SplashActivity.class);
startActivity(intent);
}
Происходит всплеск активности
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (PrefManager.getLocale(this) == null){
setLocale("en");
}else if (PrefManager.getLocale(this).equals("en")){
setLocale("en");
}else {
setLocale("ar");
}
setContentView(R.layout.activity_splash);
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class);
Splash.this.startActivity(mainIntent);
Splash.this.finish();
}
}, 3000);
}
public void setLocale(String lang) {
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
config.setLayoutDirection(locale);
this.getBaseContext().getResources().updateConfiguration(config, this.getApplication().getResources().getDisplayMetrics());
PrefManager.saveLocale(this, lang);
}
Проблема в том, что этот код работает на устройстве с API 23 и переводит все строки, но не работает на устройстве с API 22, он просто меняет только направление макета
Мой minSdkVersion 19 и targetSdkVersion 29
Ответ №1:
Я нашел ответ, если кому-то интересно
Я изменил арабское строковое имя файла с «string (ar-rEG)» на «string (ar)»
и это работает нормально