【问题标题】:OnConfigurationChanged is not called after locale config change语言环境配置更改后不调用 OnConfigurationChanged
【发布时间】:2016-04-06 07:06:30
【问题描述】:

我想做的是在应用内为用户提供简单的语言更改。当前视图的文本以及 Back Stack 应替换为所选语言的字符串。我刚刚编写了以下代码 sn-p 可以很好地完成他的工作:

private void setLocale(Locale locale) {
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());
}

经过一番研究,我发现,在更改语言环境配置后,每个活动都应该自动刷新 - 但在我的情况下并非如此。当前视图以及整个 Back Stack 仍然具有默认区域设置 - 它们只是在重新打开活动后更改。

我已经将属性android:configChanges="locale|layoutDirection" 添加到我的AndroidManifest.xml 中,这样就无法解决问题了。

你们有什么建议吗?或者我有错误的目的来解决这个问题?

编辑
好吧,OnConfigurationChanged() 似乎只能通过在 android 设置中更改设备范围内的语言来触发?
在我的应用程序中更改语言后,是否有任何其他方法可以刷新每个活动活动(当前和返回堆栈)?

【问题讨论】:

  • 从这里 android:configChanges="locale|layoutDirection" 删除“locale”后试试,它会起作用。
  • 我很害怕,但是从 AndroidManifest 活动属性中删除“语言环境”对我来说并不能解决这个问题。 @LoveGrag
  • 你解决了吗?

标签: java android configuration locale


【解决方案1】:

我认为如果您创建一个具有此事件过滤器的接收器

<action android:name="android.intent.action.LOCALE_CHANGED"/> 当设备区域设置改变时会给你一个事件,然后你可以刷新你想要的所有活动。为了刷新你可以查看this。 希望它能解决您的问题。

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多