我发现了只在 Android N 设备上重现的非常奇怪的错误。
在浏览我的应用程序时,可以更改语言。这是更改它的代码。
public void update(Locale locale) {
Locale.setDefault(locale);
Configuration configuration = res.getConfiguration();
if (BuildUtils.isAtLeast24Api()) {
LocaleList localeList = new LocaleList(locale);
LocaleList.setDefault(localeList);
configuration.setLocales(localeList);
configuration.setLocale(locale);
} else if (BuildUtils.isAtLeast17Api()){
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}
res.updateConfiguration(configuration, res.getDisplayMetrics());
}
此代码在我的游览活动中效果很好(使用 recreate()
调用)但在接下来的所有活动中,所有字符串资源都是错误的。屏幕旋转修复它。我该怎么办这个问题?我应该以不同方式更改 Android N 的区域设置还是只是系统错误?
PS 这是我发现的。 MainActivity 的第一次启动(在我的游览之后) Locale.getDefault()
是正确的,但资源是错误的。但是在其他活动中,它给了我错误的语言环境和来自该语言环境的错误资源。旋转屏幕后(或者可能是其他一些配置更改) Locale.getDefault()
是正确的。
原文由 Kuva 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的。最后我设法找到了解决方案。
首先,您应该知道在 25 API 中
Resources.updateConfiguration(...)
已被弃用。所以你可以这样做:context.createConfigurationContext(configuration)
方法。笔记: