android webview缩放功能,在Android WebView中启用/禁用缩放

18a88f1fe8d91a317546cc7994d00609.png

千万里不及你

在为客户开发Android应用程序时,我们遇到了同样的问题,我设法绕过了这一限制。我查看了WebView类的Android源代码,发现了updateZoomButtonsEnabled()-method与ZoomButtonsController-object一起使用,以根据浏览器的当前比例来启用和禁用缩放控件。我搜索了一种返回ZoomButtonsController-instance的getZoomButtonsController()方法,并找到了-method,该方法返回了这个实例。尽管已声明该方法public,但WebView-documentation中未记录该方法,并且Eclipse也找不到它。因此,我WebView对此进行了一些思考,并创建了自己的-subclass来覆盖onTouchEvent()-method,该方法触发了控件。public class NoZoomControllWebView extends WebView {    private ZoomButtonsController zoom_controll = null;    public NoZoomControllWebView(Context context) {        super(context);        disableControls();    }    public NoZoomControllWebView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        disableControls();    }    public NoZoomControllWebView(Context context, AttributeSet attrs) {        super(context, attrs);        disableControls();    }    /**     * Disable the controls     */    private void disableControls(){        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {            // Use the API 11+ calls to disable the controls            this.getSettings().setBuiltInZoomControls(true);            this.getSettings().setDisplayZoomControls(false);        } else {            // Use the reflection magic to make it work on earlier APIs            getControlls();        }    }    /**     * This is where the magic happens :D     */    private void getControlls() {        try {            Class webview = Class.forName("android.webkit.WebView");            Method method = webview.getMethod("getZoomButtonsController");            zoom_controll = (ZoomButtonsController) method.invoke(this, null);        } catch (Exception e) {            e.printStackTrace();        }    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        super.onTouchEvent(ev);        if (zoom_controll != null){            // Hide the controlls AFTER they where made visible by the default implementation.            zoom_controll.setVisible(false);        }        return true;    }}您可能想要删除不必要的构造函数,并对可能的异常做出反应。尽管这看起来很笨拙且不可靠,但可以回溯到API级别4(Android 1.6)。正如@jayellos在评论中指出的那样,私有getZoomButtonsController()方法在Android 4.0.4及更高版本中不再存在。但是,它不需要。使用条件执行,我们可以检查我们是否在具有API Level 11+的设备上,并使用公开的功能(请参阅@Yuttadhammo答案)来隐藏控件。我更新了上面的示例代码来做到这一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值