在“活动”中,我添加了Webview(没有异常):
<WebView
tools:context=".Activities.WebViewActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"/>
在我的WebViewActivity中,我声明了它:
webview = findViewById(R.id.webView);
webview.setWebViewClient(new AppWebViewClients());
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new WebChromeClient());
webview.getSettings().setDefaultTextEncodingName("utf-8");
问题是我的应用在某些android设备上崩溃了(在Crashlytics中看到了)...我在模拟器上重现了这种情况,并获得了此日志(第一部分):
java.lang.RuntimeException: Unable to start activity ComponentInfo{jamhome.ru.lktsj/ru.domyland.superdom.Activities.WebViewActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class android.webkit.WebView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
我找到了很好的解决方案-创建Class并使用它代替基本的Webview:
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) {
return context.createConfigurationContext(new Configuration());
}
}
好吧,不再崩溃,很好,但是:我在html中加载了包含Select标记的页面,如果单击,它将无法正常工作!基本上,Android必须使用Select的变量打开系统对话框,但这不是...
有什么想法吗??
答案 0 :(得分:0)
简单地做-:
更改
<WebView
tools:context=".Activities.WebViewActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"/>
至-:
<yourpackgename.LollipopFixedWebView
tools:context=".Activities.WebViewActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"/>
也更改Java文件
LollipopFixedWebView webview=findViewById(R.id.webview);
答案 1 :(得分:0)
在HERE中查看我的问题
简而言之:仅在默认Context
导致Context
的操作系统版本上使用固定的InflateException
private 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;
}