在Android应用程序中使用自定义Locale

时间:2014-08-11 19:36:24

标签: android locale

修改

我的理解可能是错的,但这是一个与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时,我还运行上面的代码来更新配置。

我遇到的问题是:

  1. 更改区域设置后,当前活动中仅更新的文本使用新的区域设置(当我按下"返回"在之前的活动中,仅刷新的文本使用新的区域设置(如果我开始新的活动)按预期使用新的Locale。
  2. 我使用DataUtils格式化日期,但似乎无论我做什么都忽略了新的Locale。
  3. 与DataPicker相同的问题,我无法使用新的Locale。
  4. 我无法将新的Locale效果设为我的应用小部件。
  5. 对于第一个问题,我通过仅在应用程序启动时应用更改来解决它,并且当用户更新Locale时,我会显示一条消息,要求用户重新启动应用程序以使更改生效。我更喜欢在不重新启动应用程序的情况下进行更改,但无法弄清楚如何使其正常工作。

    如果我将SimpleDateFormat与自定义Locale一起使用,则可以解决第二个问题,但是如果可能的话,我更喜欢使用DateUtils。

    对于最后两个问题,我找不到任何方法来克服它。

    感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

您没有看到更改的原因是Android确实没有为此用例创建。预计区域设置将通过系统设置进行更改,而不是基于每个应用程序。通过配置设置区域设置只会更改此活动,它不会为应用程序全局设置它。如果要全局执行此操作,则需要自己存储当前区域设置,并在应用程序中每个活动的onResume上手动设置它。

我不确定是否有任何方法可以让内置实用程序尊重更改的区域设置,因为它们可能正在查看系统区域设置。您可能需要从AOSP获取窗口小部件,复制代码并更改它以查看您的区域设置变量,而不是使用内置版本。

它做了很多工作。我不知道您的应用正在做什么,但我会重新考虑是否真的需要此功能。

相关问题