Android 解决IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController
2017-12-01 16:10
645 查看
报错原因: 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(); } } }
相关文章推荐
- java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController
- Caused by: java.lang.IllegalArgumentException: Receiver not registered: android.widget.ViewFlipper
- webVIew中ZoomButtonsController崩溃//解决Receiver not registered: android.widget.ZoomButtonsController
- Receiver not registered: android.widget.ZoomButtonsController crash android 分析与解决方案
- java.lang.IllegalArgumentException: Receiver not registered: android.widget.ZoomButtonsController$1@
- webview在设置放大缩小功能时,android.widget.ZoomButtonsController错误解决办法
- android java.lang.IllegalArgumentException: The observer is null.异常解决
- Android广播接收器注册问题:Caused by: java.lang.IllegalArgumentException: Receiver not registered
- 使用Android提供的模拟任意地理位置,报java.lang.IllegalArgumentException: Incomplete location object异常的解决方法
- android webview ZoomButtonsController 导致android.view.WindowLeaked 问题彻底解决
- 使用android OpenGL时出现的java.lang.IllegalArgumentException: Must use a native order direct Buffer错误问题解决
- 错误提示:java.lang.IllegalArgumentException: Receiver not registered。
- webview ZoomButtonsController 调用崩溃问题android.widget.ZoomButtonsController
- java.lang.illegalargumentexception view android.widget.listview is not a sliding drawer
- Mac下Android绘制点9格式png以及解决IllegalArgumentException: Unknown image type 0报错
- android L java.lang.IllegalArgumentException: Service Intent must be explicit隐式意图找不到错误解决
- android webview ZoomButtonsController 导致android.view.WindowLeaked 问题彻底解决
- java.lang.IllegalArgumentException: Receiver not registered
- java.lang.IllegalArgumentException: Receiver not registered
- IllegalArgumentException: Receiver not registered