【问题标题】:Use custom Locale in Android application在 Android 应用程序中使用自定义语言环境
【发布时间】: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"

当用户选择一个新的语言环境时,我也会运行上面的代码来更新配置。

我遇到的问题是:

  1. 更改区域设置后,当前活动中仅更新的文本使用新的区域设置(当我在上一个活动中按“返回”时,仅刷新的文本使用新的区域设置(如果我开始一个新活动,它将使用新的区域设置)预计)。
  2. 我使用 DataUtils 来格式化日期,但似乎无论我做什么都会忽略新的语言环境。
  3. DataPicker 存在同样的问题,我无法让它使用新的语言环境。
  4. 我无法让新的区域设置效果成为我的应用小部件。

对于第一个问题,我通过仅在应用程序启动时应用更改来解决它,当用户更新区域设置时,我会显示一条消息,要求用户重新启动应用程序以使更改生效。我更喜欢在不重新启动应用程序的情况下进行更改,但不知道如何使其正常工作。

如果我将 SimpleDateFormat 与自定义区域设置一起使用,则可以解决第二个问题,但如果可能,我更喜欢使用 DateUtils。

对于最后两个问题,我找不到任何解决方法。

感谢任何帮助。

【问题讨论】:

  • 不幸的是不是,我在发布这个问题之前尝试过。
  • 请编辑问题以解释为什么它与建议的问题不重复。
  • 在编辑之上进行编辑使得阅读和解析这个问题变得困难。您可以执行另一次编辑并将材料合并为一个有凝聚力的问题吗?此外,即使在您进行了编辑之后,也不清楚您在哪里实施了 Igor 从副本中的答案。您也应该包含该代码。
  • 这是一个略有不同的问题,而不是完全的欺骗。它不应该被关闭。
  • 看看我的new answer 以“以编程方式设置区域设置”。与此同时,情况发生了变化,这应该会奏效。

标签: android locale


【解决方案1】:

您没有看到这些变化的原因是,Android 确实不是为这个用例而创建的。预计区域设置将通过系统设置进行更改,而不是基于每个应用程序。通过配置设置 Locale 只会更改此 Activity,它不会为应用程序全局设置它。如果你想在全局范围内进行,你需要自己存储当前的语言环境,并在你的应用中每个活动的 onResume 中手动设置它。

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

工作量很大。我不知道你的应用在做什么,但我会重新考虑是否真的需要这个功能。

【讨论】:

    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多