上下文:我正在将HTML页面加载到Android的Web视图中。页面中有三个HTML按钮。在Web视图中,我要上下左右滑动。
问题:在向Webview添加GestureDetector之前,Webview中的HTML运行良好。添加GestureDetector代码后,HTML元素(例如按钮)将不再起作用。
我现在的位置:这是我到目前为止尝试过的内容。
package com.example.android.testwebgesture;
public class WebActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyWebView webview = new MyWebView(this);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setAppCacheEnabled(true);
webview.getSettings().setLoadsImagesAutomatically(true);
webview.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
webview.getSettings().setMediaPlaybackRequiresUserGesture(false);
webview.loadUrl("file:///android_asset/myhtmlpage.html");
setContentView(webview);
}
class MyWebView extends WebView {
Context context;
GestureDetector gd;
public MyWebView(Context context) {
super(context);
this.context = context;
gd = new GestureDetector(this.context, sogl);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return (gd.onTouchEvent(event) || super.onTouchEvent(event));
}
GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {
public boolean onDown(MotionEvent event) {
return true;
}
public boolean onFling(MotionEvent downEvent, MotionEvent moveEvent, float velocityX, float velocityY) {
boolean result = false;
//showToast("Fling");
return result;
}
@Override
public boolean onDoubleTap(MotionEvent event) {
Log.d(DEBUG_TAG, "onDoubleTap: " + event.toString());
//showToast("Double tapped");
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent event) {
//showToast("Single tap");
return true;
}
@Override
public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX,
float distanceY) {
}
};
void showToast(String text) {
Toast.makeText(context, text, Toast.LENGTH_LONG).show();
}
}
}
从其他SO帖子中,我发现添加super.onTouchEvent(event)
可解决此问题。但是不幸的是我仍然有这个问题。任何帮助表示赞赏!