千万里不及你
在为客户开发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答案)来隐藏控件。我更新了上面的示例代码来做到这一点。