区域设置更改后不调用 OnConfigurationChanged

spy*_*yfx 6 java configuration android locale

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

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

经过一番研究,我发现,在更改语言环境配置后,每个活动都应该自动刷新自己 - 但在我的情况下不是这样。当前视图以及整个 Back Stack 仍然具有默认语言环境 - 它们只是在重新打开 Activity 后发生变化。

我已经将属性添加android:configChanges="locale|layoutDirection"到我的,AndroidManifest.xml所以不会成功。

大家有什么建议吗?或者我是否有错误的目的来解决这个问题?

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

Lov*_*arg 0

我想如果你创建一个具有此事件过滤器的接收器

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