android bug还是滥用Configuration对象?

时间:2012-12-23 09:20:37

标签: android configuration locale

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

它看起来像:

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

我们开始我们的主要活动,并从那里开始我们的其他活动和任务。 只要我没有像屏幕旋转那样导致配置更改一切正常。 如果我旋转屏幕,Locale将返回设备默认值,即使应用程序对象保持不变。

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

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

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

1 个答案:

答案 0 :(得分:4)

您可以将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());
        }
    }