我遇到了以下问题 - 我的设备上运行4.4.2(Gigabyte Mika M3)无法更改区域设置,但它在运行API 26的Android模拟器中完美运行。
我通过以下方式更改语言环境:
Resources resources = getResources();
Configuration configuration = resources.getConfiguration();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
configuration.setLocale(locale);
resources.updateConfiguration(configuration,displayMetrics);
getApplicationContext().createConfigurationContext(configuration);
我也尝试过这种方式 - 但它也不起作用:
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
我将位置作为字符串存储在共享首选项中,如下所示:
SharedPreferences sharedPreferences = getSharedPreferences("languages", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("language", locale.getLanguage());
editor.apply();
在所有这些之后我重新创建活动
Intent refresh = new Intent(ChooseLanguageActivity.this, ChooseLanguageActivity.class);
startActivity(refresh);
finish();
问题是 - 重新创建的活动(this)以与之前相同的语言打开,重启时的应用程序以默认语言环境打开:C
答案 0 :(得分:0)
您的实现修改了全局applicationContext的语言环境。
在我的android-4.4.2手机上(wiko lenny)使用此https://stackoverflow.com/a/34675427/519334实现更改语言环境时没有任何问题。
这里的诀窍是你必须在调用super方法之前更改onCreate中每个-s活动的语言环境:
@Override
protected void onCreate(Bundle savedInstanceState) {
fixLocale(this);
super.onCreate(savedInstanceState);
}
Interisting看到更高版本的Android版本允许修改全局applicationContext的语言环境