当前位置:   article > 正文

Android N之后 Webview导致多语言切换混乱问题_android中英文切换得时候,如果打开了webview页面,activity的中英文会发生变化。

android中英文切换得时候,如果打开了webview页面,activity的中英文会发生变化。

最近在开发过程中,用到了WebView组件,发现带有WebView的Activity都会出现多语言混乱的问题

经查资料发现:
Android的WebView是使用webkit构建的。虽然它最初是AOSP的一部分,但是从KitKat开始,决定分离出WebView一个名为Android System WebView的组件。它基本上是一个Android系统应用程序,预装了Android设备。
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:在每个包含WebView的Activity中添加一次手动设置语言得逻辑。(注:写在onCreate方法中)

public static void changeAppLanguage(Resources resources, String lanAtr){
       String[] datas = lanAtr.split("_");
        Locale locale = new Locale(datas[0], datas[1]);
        Context context = MyApplication.getInstance();
        Configuration configuration = resources.getConfiguration();
        Locale.setDefault(locale);
        configuration.setLocale(locale);
        if (Build.VERSION.SDK_INT >= 25) {
            context = context.getApplicationContext().createConfigurationContext(configuration);
            context = context.createConfigurationContext(configuration);
        }

        context.getResources().updateConfiguration(configuration,
                resources.getDisplayMetrics());
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

步骤2:

new WebView(this).destroy();
  • 1

将此代码添加到Applicaiton的oncreate()下

参考https://stackoverflow.com/questions/40398528/android-webview-language-changes-abruptly-on-android-n

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/196548
推荐阅读