我们在 Application 对象的 onCreate 方法中有一些代码可以更改 ApplicationContext 配置中的默认本地。
它看起来像:
Locale locale = new Locale(sSavedLocale);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
然后我们开始我们的主要 Activity ,然后从那里开始我们的其他 Activity 和任务。 只要我不引起屏幕旋转等配置更改,一切都可以。 如果我旋转屏幕,Locale 将返回到设备默认值,即使应用程序对象保持不变。
深入研究 ActivityThread 和其他内部类的 android 源代码,我可以看到 ApplicationContext 本身和 mainThread 中的上下文在配置更改事件时更改回默认值。
这对我来说似乎是一个错误,因为我在应用程序启动时在应用程序级别设置了配置,我可能想保持更改,除非发生本地配置更改,即使这样......
我没有检查我确实想应用的开放错误。 有人认为我错了,这是可以的行为吗?
最佳答案
您可以将 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());
}
}
关于android 错误或配置对象的误用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009870/