0

我有一个带有 WebView 的 android-app (Android SDK 10)。在那个 WebView 上,我必须使用具有固定位置的元素。现在我知道,固定元素存在问题,但 HTML 中的代码如下:

<meta name="viewport"
  content="width=100%; 
  initial-scale=1;
  maximum-scale=1;
  minimum-scale=1; 
  user-scalable=no;">

这对于 Webview:

WebView mWebView = (WebView) findViewById(R.id.webView1);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.getSettings().setSupportZoom(true);
mWebView.setVerticalScrollBarEnabled(true);
mWebView.loadUrl("path/to.html");

使用缩放控件时我可以缩放。然而,多点触控和双指缩放会扭曲页面。

是否有可能禁用 pich- 和 multitouchzoom 但保持缩放控件正常工作?


在 Vikalp Patel 的建议下,我得出了这个解决方案:

CustomWebView mWebView = (CustomWebView) findViewById(R.id.webView1);
mWebView.loadUrl("path/to.html");

CustomWebView.java

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.webkit.WebView;

public class CustomWebView extends WebView {

    /**
     * Constructor
     */
    public CustomWebView(Context context) {
        super(context);
    }

    /**
     * Constructor
     */
    public CustomWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    /*
     * (non-Javadoc)
     * 
     * @see android.webkit.WebView#onTouchEvent(android.view.MotionEvent)
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getPointerCount() > 1) {
            this.getSettings().setSupportZoom(false);
            this.getSettings().setBuiltInZoomControls(false);
        } else {
            this.getSettings().setSupportZoom(true);
            this.getSettings().setBuiltInZoomControls(true);
        }
        return super.onTouchEvent(event);
    }
}

layout.xml 中的实现

<package.path.CustomWebView
   ...
 />

希望,这有助于某人。

4

2 回答 2

0

我查看了 WebView 的源代码并得出结论,没有优雅的方法可以完成您的要求。

我最终做的是继承 WebView 并覆盖OnTouchEvent

. 在OnTouchEventfor 中ACTION_DOWN,我检查有多少指针正在使用MotionEvent.getPointerCount()。如果有多个指针,我调用setSupportZoom(false),否则我调用setSupportZoom(true)。然后我打电话给super.OnTouchEvent().

这将在滚动时有效地禁用缩放(从而禁用缩放控件)并在用户即将捏缩放时启用缩放。这不是一个很好的方法,但到目前为止它对我来说效果很好。

请注意,这getPointerCount()是在 2.1 中引入的,因此如果您支持 1.6,您将不得不做一些额外的事情。

于 2013-01-03T12:18:59.610 回答
0
Try to the following code

WebView mWebView = (WebView) findViewById(R.id.webView1);
mWebView.getSettings().setSupportZoom(true);
mWebView.setVerticalScrollBarEnabled(true);
mWebView.loadUrl("path/to.html");
于 2013-01-03T12:23:00.403 回答