ズームとズーム解除の代わりに、doubleTap モーション イベントをオーバーライドして何もしないようにしたいと考えています。別の投稿で、誰かがカスタム WebView クラスを作成してそこにあるものをオーバーライドすることでこれを機能させることができたと読みましたが、何があっても onDoubleTap を起動させることができず、ダブルタップズームは依然として発生していますこれ。
これまでのところ、onDown イベントを適切に発生させることができるようになっています (デバッグ出力ウィンドウにメッセージが表示されます)。
これが私のコードです。投稿の一番下には、現在問題のあるデモ プロジェクトのバージョンへのリンクがあります。
(main.xml)
<?xml version="1.0" encoding="utf-8"?>
<xonmp.hellowwebview.MyWebView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
(helloWebViewActivity.java)
package xonmp.hellowwebview;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import xonmp.cannedwebview.R;
import xonmp.hellowwebview.MyWebView;
public class HelloWebViewActivity extends Activity {
//private WebView mWebView;
private MyWebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d("We Got Here", "By here I mean onCreate");
//mWebView = (WebView) findViewById(R.id.webview);
mWebView = (MyWebView) findViewById(R.id.webview);
WebSettings config = mWebView.getSettings();
config.setJavaScriptEnabled(true);
config.setLoadWithOverviewMode(true);
config.setUseWideViewPort(true);
config.setBuiltInZoomControls(false);
config.setSupportZoom(false);
// config.setUserAgentString("android-client");
mWebView.loadUrl("http://www.google.com");
mWebView.setWebViewClient(new HelloWebViewClient());
}
private class HelloWebViewClient extends WebViewClient{
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url){
webview.loadUrl(url);
return true;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if ((keyCode == KeyEvent.KEYCODE_BACK)&& mWebView.canGoBack()){
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
しかし、私自身の MyWebView.java クラスではまだ onDoubleTab メソッドをフックできません
(MyWebView.java)
package xonmp.hellowwebview;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.webkit.WebView;
import android.widget.Toast;
class MyWebView extends WebView {
boolean doubleTap = false;
public MyWebView(Context context) {
super(context);
}
public MyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d("113133", "onTouchEvent Fired!");
if(true){
GestureDetector gd = new GestureDetector(sogl);
gd.onTouchEvent(event);
// disable double tap zooming
if(doubleTap){
doubleTap = false;
return false;
}
return super.onTouchEvent(event);
}
return super.onTouchEvent(event);
}/**/
GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {
public boolean onDown(MotionEvent e){
Log.d("ohmygosh", "ohmygosh - onDown");
return false;
}
public boolean onDoubleTap(MotionEvent e) {
doubleTap = true;
Log.d("ohmygosh", "ohmygosh - onDoubleTap");
return false;
}
};/**/
/*
@Override
public boolean onTouchEvent(MotionEvent event){
Log.d("113133", "onTouchEvent Fired!");
//float myF = 9/0;
return true;
}/**/
}
ここにgithub リンクがあります (ロード URL をおそらく google のようなものに変更する必要があります)。
あなたが助けてくれるなら、どうもありがとう!
編集: 構成設定をもう一度いじり始めることにしましたが、これを実行可能な解決策として思いつきました:
WebSettings config = mWebView.getSettings();
config.setJavaScriptEnabled(true);
//config.setLoadWithOverviewMode(true);
//config.setUseWideViewPort(true);
config.setBuiltInZoomControls(false);
config.setSupportZoom(false);
// config.setUserAgentString("android-client");
mWebView.setInitialScale(80);
setInitialScale がどのように機能するかは正確にはわかりません...別のページの幅がここで行っている幅とまったく同じでない場合、間違ってズームされるのではないかと思います。