gpt4 book ai didi

android - 在 Android 应用程序中使用自定义语言环境

转载 作者:行者123 更新时间:2023-11-29 17:47:44 40 4
gpt4 key购买 nike

编辑:

我的理解可能有误,但这是一个不同于 Set Locale programmatically 的问题因为我已经实现了那里建议的答案,但我仍然有一些问题。

在这个问题中,我寻求帮助解决这些问题(在Set Locale programatically 问题中没有引用的问题)。

原帖

我正在尝试在我的应用程序中实现自定义语言环境,但遇到了几个问题。

在调用 setContentView 之前,我在我的所有 Activity 中使用了以下代码:

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 中的所有 Activity 添加了以下属性:

android:configChanges="locale|orientation"

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

我遇到的问题是:

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

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

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

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

感谢任何帮助。

最佳答案

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

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

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

关于android - 在 Android 应用程序中使用自定义语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25251015/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com