隐藏android中webview放大缩小控件

在android SDK版本11以前(也就是Android3.0以前),webvie是不可以隐藏缩放控件的,现在我们通过反射来隐藏该控件。

重写WebView:
import java.lang.reflect.Method;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.webkit.WebView;
import android.widget.ZoomButtonsController;

/**
 * 去掉webview当中放大缩小控件,并且保留效果
 */
public class SupportZoomWebView extends WebView {
	// Webview内部的按钮控制对象
	private ZoomButtonsController zoomController = null;

	public SupportZoomWebView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		disableZoomController();
	}

	public SupportZoomWebView(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
		disableZoomController();
	}

	public SupportZoomWebView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		disableZoomController();
	}

	// 使得控制按钮不可用
	@SuppressLint("NewApi")
	private void disableZoomController() {
		// API version 大于11的时候,SDK提供了屏蔽缩放按钮的方法
		if (android.os.Build.VERSION.SDK_INT >= 11) {
			this.getSettings().setBuiltInZoomControls(true);
			this.getSettings().setDisplayZoomControls(false);
		} else {
			// 如果是11- 的版本使用JAVA中的映射的办法
			getControlls();
		}
	}

	private void getControlls() {
		try {
			Class webview = Class.forName("android.webkit.WebView");
			Method method = webview.getMethod("getZoomButtonsController");
			zoomController = (ZoomButtonsController) method.invoke(this, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	public boolean onTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		super.onTouchEvent(ev);
		if (zoomController != null) {
			// 隐藏按钮
			zoomController.setVisible(false);
		}
		return true;
	}
}

猜你喜欢

转载自liucanwen.iteye.com/blog/2098426