Android使用WebView时打开select标签崩溃的解决方案
最近在写Android的时候遇到了一个无头绪的崩溃。当使用WebView打开HTML5,点击select标签时,会出现崩溃闪退的情况。查阅百度后发现没有一个可以给得出具体代码的,只给出了很模糊的解决思路,于是自己摸索。终于解决了。本问以腾讯X5的第三方WebView组件为例。其余第三方或原生WebView同理。参考资料:https://www.itdaan.com/blog/2017/05/10/d8b27bec637baf53bf216824e456c357.html
0x0000 问题描述
当在安卓应用的WebView组件中点击下方的HTML5中的select组件时,会出现很抱歉,"XXXX"已经停止工作类似提示。

0x0001 首先配置好XML布局文件
activity_main.xml
1 | <?xml version="1.0" encoding="utf-8"?> |
0x0002 解决思路
出现这类问题的原因未知,如果没猜错的话,应该是webview的构造函数中应该传递的Activity是当前活跃的Activity,不然会报错崩溃。但是通过百度我发现一种解决思路:
使用new关键字new出一个
WebView,叫做webView1,设置WebView构造方法的参数为当前Activity对象,即this。即WebView webView1 = new WebView(this);使用
LinearLayout linearLayout =findViewById(R.id.linearLayout);获取xml中linearLayout3. 再使用linearLayout.removeAllViews();方法删掉原xml中的webView。4. 再通过ViewGroup.LayoutParams layoutParams = findViewById(R.id.webView).getLayoutParams();获取铺满屏幕的webview布局。5. 再通过webView1.setLayoutParams(layoutParams);让new出的WebView与XML中配置的webView布局参数一致,铺满屏幕。 最后使用linearLayout.addView(webView1)添加我们刚new出的构造方法为this的webView1对象。
1 | ViewGroup.LayoutParams layoutParams = findViewById(R.id.webView).getLayoutParams();//获取铺满屏幕的webview布局 |
最后再在AndroidManifest.xml中添加以下两个权限即可。
1 | <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> |
0x0003 最终效果
现在,select组件已经可以正常使用了。