Android N之后 Webview导致多语言切换失效的问题
来源:互联网 发布:windows phone微信 编辑:程序博客网 时间:2024/05/16 15:08
这两天做了多国家多语言切换的需求,遇到了一个问题。android N版本之后在进入包含webview 页面之后,再次切换语言失效的问题,记录一下。原因是:webview 在Android N之后,webview的相关类以及相关jar的修改Android N 之前: Android的WebView是使用webkit构建的。虽然它最初是AOSP的一部分,但是从KitKat开始,决定分离出WebView一个名为Android System WebView的组件。它基本上是一个Android系统应用程序,预装了Android设备。它会像其他系统应用程序(如Google Play服务和Play商店应用程序)一样定期更新。您可以在已安装的系统应用列表中看到它:
Android 7.0之后: Chrome应用将用于呈现WebView第三方Android应用中的任何/所有内容。在具有Android N开箱即用的手机中,Android WebView系统应用根本不存在。在已收到Android N的OTA更新的设备中,Android系统WebView被禁用:
此外,引入了多语言支持,设备具有多种默认语言: 如果应用中包含WebView,那么使用Chrome应用呈现这些内容。因为Chrome 本身就是一个Android应用程序,运行在自己的沙盒过程中,所以它不会被绑定到您的应用程序设置的区域设置。相反,Chrome将恢复到主设备区域设置。例如,假设您的应用程序语言环境设置为ar-AE,而设备的主要语言环境为en-US。在这种情况下,Activity包含a 的语言环境WebView将从中更改ar-AE为en-US,并且将显示相应语言环境文件夹中的字符串和资源。你可能会看到在那些Activitys上有LTR和RTL字符串/资源的混杂WebView。 解决方案: 这个问题的完整解决方案由两个步骤组成: 步骤1: 首先,在每一个Activity,或者至少每Activity一个都有一个手动重置默认语言环境WebView。
public static void setLocale() { Locale locale = new Locale(APP_LANG, APP_LOCALE); Configuration config = AppApplication.getInstance().getBaseContext() .getResources().getConfiguration(); Locale.setDefault(locale); config.locale = locale; LogUtil.d(TAG, " set locale to :" + locale.toString()); AppApplication.getInstance() .getBaseContext() .getResources() .updateConfiguration(config, AppApplication.getInstance().getBaseContext().getResources().getDisplayMetrics()); }
在所有的Acticity 页面的onCreate()中执行该方法,有基类Activity的,直接放到基类的oncreate()中就可以,一定注意要包含所有的webview页面。该locale参数应该是Locale希望设置的默认值。例如,如果您希望将Arabic / UAE设置为默认语言环境,则应该通过new Locale("ar", "AE")。 步骤2:
new WebView(this).destroy();
将这行代码添加到Applicaiton的oncreate下,以及用户可能正在改变语言的地方。
参考资料:
https://stackoverflow.com/questions/40398528/android-webview-language-changes-abruptly-on-android-n
阅读全文
0 0
- Android N之后 Webview导致多语言切换失效的问题
- Android中解决破解签名验证之后导致的登录授权失效问题
- win10 任务栏点击失效和语言切换的问题
- 关于android webview js桥(addJavascriptInterface) 失效的问题
- android webview goBack()之后 getUrl()无效问题
- Xcode更新之后插件失效的问题
- android语言切换问题
- 内存越界导致的malloc失效问题
- transform导致的border-radius失效问题
- Android WebView clearHistory 失效的解决方案
- 关于Android应用内多语言切换的问题
- WebView loadurl导致的空指针问题
- 解决Android签名混淆后WebView与JS交互失效的问题
- android webview中调用了js的时候混淆失效问题
- 安卓学习笔记---解决Android签名混淆后WebView与JS交互失效的问题
- Android在webview上设置cookie,部分cookie失效的问题
- 解决Android签名混淆后WebView与JS交互失效的问题
- Android开发问题记录-webview goBack键失效
- NYACM_003
- 汇编第十一节-标志寄存器
- cxf client
- DL | 快速使用Tensorboard可视化模型参数和模型结构
- 0001+1=0002
- Android N之后 Webview导致多语言切换失效的问题
- Ubuntu16.04安装ROS kinetic
- 存储过程之format函数使用经验
- 无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
- arcgis server rest服务查询时间返回大数字如13001263600000怎么办
- 实现开发环境、测试环境、生产环境配置自动切换
- 网络检测的简单方法
- python学习总结---字典
- convert-sorted-array-to-binary-search-tree