【发布时间】:2014-08-11 19:36:24
【问题描述】:
编辑:
我的理解可能有误,但这是与Set Locale programmatically 不同的问题,因为我已经实施了那里建议的答案,但我仍然有一些问题。
在这个问题中,我寻求帮助以解决这些问题(在 Set Locale programatically 问题中没有参考的问题)。
原帖
我正在尝试在我的应用程序中实现自定义语言环境并遇到了几个问题。
在调用 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"
当用户选择一个新的语言环境时,我也会运行上面的代码来更新配置。
我遇到的问题是:
- 更改区域设置后,当前活动中仅更新的文本使用新的区域设置(当我在上一个活动中按“返回”时,仅刷新的文本使用新的区域设置(如果我开始一个新活动,它将使用新的区域设置)预计)。
- 我使用 DataUtils 来格式化日期,但似乎无论我做什么都会忽略新的语言环境。
- DataPicker 存在同样的问题,我无法让它使用新的语言环境。
- 我无法让新的区域设置效果成为我的应用小部件。
对于第一个问题,我通过仅在应用程序启动时应用更改来解决它,当用户更新区域设置时,我会显示一条消息,要求用户重新启动应用程序以使更改生效。我更喜欢在不重新启动应用程序的情况下进行更改,但不知道如何使其正常工作。
如果我将 SimpleDateFormat 与自定义区域设置一起使用,则可以解决第二个问题,但如果可能,我更喜欢使用 DateUtils。
对于最后两个问题,我找不到任何解决方法。
感谢任何帮助。
【问题讨论】:
-
不幸的是不是,我在发布这个问题之前尝试过。
-
请编辑问题以解释为什么它与建议的问题不重复。
-
在编辑之上进行编辑使得阅读和解析这个问题变得困难。您可以执行另一次编辑并将材料合并为一个有凝聚力的问题吗?此外,即使在您进行了编辑之后,也不清楚您在哪里实施了 Igor 从副本中的答案。您也应该包含该代码。
-
这是一个略有不同的问题,而不是完全的欺骗。它不应该被关闭。
-
看看我的new answer 以“以编程方式设置区域设置”。与此同时,情况发生了变化,这应该会奏效。