问题描述
项目在部分Android 5.x系统手机上面使用webView会导致崩溃,其他的android版本未发现此类问题。
报错信息如下:
android.view.InflateException: Binary XML file line #24: Error inflating class android.webkit.WebView
解决方式
1. 解决办法一(推荐)
如果项目中使用"androidx.appcompat:appcompat:1.1.0"
,1.1.0版本webview在Android5.x上有问题,替换为最新的版本或者是比较旧的版本。
替换较新版本例如:'androidx.appcompat:appcompat:1.2.0'
替换为较旧版本例如:androidx.appcompat:appcompat:1.0.2
解决办法二
在Android5.x上通过解决自定义WebView
经过下面自定义view处理,解决了在vivo5.1.1手机上面的问题。
public class LollipopFixedWebView extends WebView {
public LollipopFixedWebView(Context context) {
super(getFixedContext(context));
}
public LollipopFixedWebView(Context context, AttributeSet attrs) {
super(getFixedContext(context), attrs);
}
public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(getFixedContext(context), attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(getFixedContext(context), attrs, defStyleAttr, defStyleRes);
}
public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) {
super(getFixedContext(context), attrs, defStyleAttr, privateBrowsing);
}
public static Context getFixedContext(Context context) {
if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 23) // Android Lollipop 5.0 & 5.1
return context.createConfigurationContext(new Configuration());
return context;
}
}
主要核心方法是getFixedContext(context),根据版本号配置不同的context。