0

WebView を備えた Android アプリ (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");

zoomcontrolls を使用するとズームできます。ただし、マルチタッチとピンチズームはページをゆがめます。

ピッチズームとマルチタッチズームを無効にしながら、ズームコントロールを機能させ続けることはできますか?


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
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 に答える
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 に答える