【问题标题】:Can't change current locale on Android 4.4.2无法更改 Android 4.4.2 上的当前语言环境
【发布时间】:2018-01-24 11:26:20
【问题描述】:

我遇到以下问题 - 无法在运行 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

【问题讨论】:

    标签: java android locale


    【解决方案1】:

    您的实现修改了全局 applicationContext 的语言环境。

    在我的 android-4.4.2 手机 (wiko lenny) 上,使用此 https://stackoverflow.com/a/34675427/519334 实现更改语言环境没有任何问题。

    这里的诀窍是,在调用 super 方法之前,您必须在 onCreate 中更改 every-s 活动的语言环境:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        fixLocale(this);
        super.onCreate(savedInstanceState);
    }
    

    有趣的是更高版本的android允许修改全局applicationContext的语言环境

    【讨论】:

    • 感谢您的回复。我试过你的方法,不幸的是它对我也不起作用。它的真实设备或模拟器。
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2015-07-19
    相关资源
    最近更新 更多