修改
我的理解可能是错的,但这是一个与Set Locale programmatically不同的问题,因为我已经实现了那里建议的答案,我仍然有一些问题。
在这些问题中,我正在寻求帮助来解决这些问题(在以编程方式设置区域设置问题中没有参考的问题)。
原帖
我正在尝试在我的应用程序中实现自定义区域设置并遇到几个问题。
我在调用setContentView:
之前的所有活动中都使用了以下代码Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = new Locale(newLocale);;
res.updateConfiguration(conf, dm);
修改
我还测试了它:
Resources res = getBaseContext().getResources();
我在AndroidManifest.xml的所有活动中添加了以下属性:
android:configChanges="locale|orientation"
当用户选择新的Locale时,我还运行上面的代码来更新配置。
我遇到的问题是:
对于第一个问题,我通过仅在应用程序启动时应用更改来解决它,并且当用户更新Locale时,我会显示一条消息,要求用户重新启动应用程序以使更改生效。我更喜欢在不重新启动应用程序的情况下进行更改,但无法弄清楚如何使其正常工作。
如果我将SimpleDateFormat与自定义Locale一起使用,则可以解决第二个问题,但是如果可能的话,我更喜欢使用DateUtils。
对于最后两个问题,我找不到任何方法来克服它。
感谢任何帮助。
答案 0 :(得分:3)
您没有看到更改的原因是Android确实没有为此用例创建。预计区域设置将通过系统设置进行更改,而不是基于每个应用程序。通过配置设置区域设置只会更改此活动,它不会为应用程序全局设置它。如果要全局执行此操作,则需要自己存储当前区域设置,并在应用程序中每个活动的onResume上手动设置它。
我不确定是否有任何方法可以让内置实用程序尊重更改的区域设置,因为它们可能正在查看系统区域设置。您可能需要从AOSP获取窗口小部件,复制代码并更改它以查看您的区域设置变量,而不是使用内置版本。
它做了很多工作。我不知道您的应用正在做什么,但我会重新考虑是否真的需要此功能。