无法在Android 4.4.2

时间:2017-08-16 10:49:06

标签: java android locale

我遇到了以下问题 - 我的设备上运行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

1 个答案:

答案 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的语言环境