我知道之前有人问过关于 Android N 中 WebView 被破坏的问题,尤其是本地化方面的问题。我还有另一个问题,我不知道如何解决。 如
图片所示,我在运行 7.1.1 的 Pixel 设备上设置了两种语言。现在,我尝试在我的应用程序的 WebView 中加载以下网址。
"https://accounts.google.com/ServiceLogin?<my-params>"
我注意到页面以中文加载,而不是我当前的语言环境英语。我尝试在 Chrome 桌面上打开上述链接(我使用与手机相同的帐户登录),它也以中文加载!我进入 Chrome 的设置,发现它们的语言首选项已保存到我的帐户中,因为它们也显示在
中。 我确实尝试在我的应用程序中
setContentView()
之前设置区域设置,如下所示:
public static void setLocale(Locale locale){
Locale.setDefault(locale);
Configuration config = new Configuration();
config.setLocale(locale);
Context context = MyApplication.getInstance();
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
}
但徒劳。如果我输入一条日志语句,它会打印正确的
Locale
,即
en-US
。不过,WebView
仍然以中文加载页面。关于如何修复它有什么想法吗?首次启动网络视图时,它将区域设置重置为默认值。
您还可以检查 Activity/Fragment 生命周期何时切换语言。
来源:
https://issuetracker.google.com/issues/37113860https://gist.github.com/amake/0ac7724681ac1c178c6f95a5b09f03ce#new-locales-vs-old-locales-chinese Android 4.1+ 中区域设置更改后,Activity 闪烁
override fun onCreate(savedInstanceState: Bundle?) {
if (savedInstanceState == null)
webViewLocalesBugWorkaround()
super.onCreate(savedInstanceState)
// etc.
}
private fun webViewLocalesBugWorkaround() {
val webView = WebView(this)
}