1

我们在 Application 对象的 onCreate 方法中有一些代码,用于更改 ApplicationContext 配置中的默认本地。

它看起来像:

Locale locale = new Locale(sSavedLocale);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());

然后我们开始我们的主要活动,然后从那里开始我们的其他活动和任务。只要我不导致屏幕旋转等配置更改,一切都可以。如果我旋转屏幕,区域设置将返回到设备默认值,即使应用程序对象保持不变。

深入研究 ActivityThread 和其他内部类的 android 源代码,我可以看到 ApplicationContext 本身,并且 mainThread 中的上下文在配置更改事件中更改回默认值。

这对我来说似乎是一个错误,因为 ii 在应用程序启动时在应用程序级别设置配置我可能希望保持更改,除非发生本地配置更改,即使那样......

我没有检查开放的错误,我确实想应用一个。有人认为我错了,这是可以的行为吗?

4

1 回答 1

5

您可以添加onConfigurationChanged到您的Application班级。

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        if (newConfig.locale != null)
        {
            Locale locale = new Locale(sSavedLocale);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            getResources().updateConfiguration(config, getResources().getDisplayMetrics());
        }
    }
于 2012-12-23T09:52:14.077 回答