WebView 语言错误 Android N

问题描述 投票:0回答:2

我知道之前有人问过关于 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
仍然以中文加载页面。关于如何修复它有什么想法吗?
    

android webview android-7.0-nougat
2个回答
0
投票

首次启动网络视图时,它将区域设置重置为默认值。
  • 如果您随后旋转手机 - 区域设置将正确设置回自定义区域设置。
  • 如果您再次启动网络视图 - 区域设置保持正确。
  • 要解决此问题,您必须在页面加载后切换回您选择的语言。

您还可以检查 Activity/Fragment 生命周期何时切换语言。

来源:

https://issuetracker.google.com/issues/37113860

https://gist.github.com/amake/0ac7724681ac1c178c6f95a5b09f03ce#new-locales-vs-old-locales-chinese Android 4.1+ 中区域设置更改后,Activity 闪烁


0
投票
只需在主 Activity onCreate() 开始时创建未使用的虚拟 WebView。


override fun onCreate(savedInstanceState: Bundle?) { if (savedInstanceState == null) webViewLocalesBugWorkaround() super.onCreate(savedInstanceState) // etc. } private fun webViewLocalesBugWorkaround() { val webView = WebView(this) }

© www.soinside.com 2019 - 2024. All rights reserved.