在区域设置配置更改后不调用OnConfigurationChanged

时间:2016-01-01 23:39:37

标签: java android configuration locale

我想要做的是为应用内的用户提供简单的语言更改。应使用所选语言的字符串替换当前视图的文本以及后退堆栈。我刚刚编写了以下代码片段来完成他的工作:

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设置中更改设备范围内的语言来触发? 在我的应用程序中更改语言后,还有其他方法可以刷新每个活动活动(当前和后台堆栈)吗?

1 个答案:

答案 0 :(得分:0)

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

<action android:name="android.intent.action.LOCALE_CHANGED"/> 将在设备区域设置更改时为您提供事件,然后您可以刷新所需的所有活动。如需刷新,您可以查看this。 希望它能解决你的问题。