Android 解决IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController
来源:互联网 发布:网络信息安全科普视频 编辑:程序博客网 时间:2024/06/17 17:50
报错原因: WebView中包含一个ZoomButtonsController,当使用webVeiw.getSettings().setBuiltInZoomControls(true);启用后,用户一旦触摸屏幕,就会出现缩放控制图标。如果图标自动消失前执行了webVeiw.destroy();,就会报上面的这些异常。解决方法: 1、webVeiw.getSettings().setBuiltInZoomControls(false); 2、在退出activity是不执行webVeiw.destroy(),或者延迟几秒,等ZoomButtonsController缩放控制图标消失了在执行webVeiw.destroy(); 3、在webview中隐藏ZoomButtonsController缩放控制图标;隐藏ZoomButtonsController代码如下:
public class MainActivity extends Activity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webView); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setSupportZoom(true); webView.getSettings().setSupportMultipleWindows(true); webView.getSettings().setBuiltInZoomControls(true); //缩放控制图标 webView.loadUrl("www.baidu.net"); int sysVersion = Build.VERSION.SDK_INT; if (sysVersion >= 11) { setZoomControlGoneX(webView.getSettings(), new Object[]{false}); } else { setZoomControlGone(webView); } } //通过反射隐藏webview的缩放按钮 适用于3.0和以后 public void setZoomControlGoneX(WebSettings view, Object[] args) { Class classType = view.getClass(); try { Class[] argsClass = new Class[args.length]; for (int i = 0, j = args.length; i < j; i++) { argsClass[i] = args[i].getClass(); } Method[] ms = classType.getMethods(); for (int i = 0; i < ms.length; i++) { if (ms[i].getName().equals("setDisplayZoomControls")) { try { ms[i].invoke(view, false); } catch (Exception e) { e.printStackTrace(); } break; } } } catch (Exception e) { e.printStackTrace(); } } //通过反射隐藏webview的缩放按钮 适用于3.0以前 public void setZoomControlGone(View view) { Class classType; Field field; try { classType = WebView.class; field = classType.getDeclaredField("mZoomButtonsController"); field.setAccessible(true); ZoomButtonsController mZoomButtonsController = new ZoomButtonsController(view); mZoomButtonsController.getZoomControls().setVisibility(View.GONE); try { field.set(view, mZoomButtonsController); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } }}
阅读全文
0 0
- Android 解决IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController
- java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController$1@
- java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController
- webVIew中ZoomButtonsController崩溃//解决Receiver not registered: android.widget.ZoomButtonsController
- Receiver not registered: android.widget.ZoomButtonsController crash android
- Receiver not registered: android.widget.ZoomButtonsController crash android
- Android java.lang.IllegalArgumentException: Receiver not registered
- Receiver not registered: android.widget.ViewFlipper 问题
- Caused by: java.lang.IllegalArgumentException: Receiver not registered: android.widget.ViewFlipper
- android Receiver not registered:
- android "receiver not registered"
- IllegalArgumentException: Receiver not registered
- Android Receiver not registered问题
- Android广播接收器注册问题:Caused by: java.lang.IllegalArgumentException: Receiver not registered
- java.lang.IllegalArgumentException: Receiver not registered
- java.lang.IllegalArgumentException: Receiver not registered: null
- java.lang.IllegalArgumentException: Receiver not registered: null
- java.lang.IllegalArgumentException: Receiver not registered
- 移动端触碰/滚动屏幕,弹出框隐藏
- 关于对三次握手和四次挥手的体会
- basepath 跨域问题 nginx
- 友盟统计
- 公共钥匙盒
- Android 解决IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController
- 微信小程序三种类型的导航连接
- sdnu-并查集-weeklyexam ——D
- 帧间差分法
- python3 调用pymysql 通过ssh 链接mysql
- MFC——LIstCtrl中嵌入Edit和Combobox控件
- Leetcode_735 Asteroid Collision
- Spring中classpath路径问题
- C++ 学习之QT添加管理员权限