Android - Webview页面需要双击 - 如何处理?

时间:2013-12-28 01:25:55

标签: android webview android-webview gesturedetector

我的应用程序只是一个显示特定网站的WebView。用户无法简单地使用Chrome应用,因为Android中的固有编程会改变点击功能。

为简单起见,我们假设该网站显示日历,并在该日历上显示框。可以单击这些框进行选择,也可以双击打开以显示事件详细信息。

该网站的编码可以处理单个或双击事件时的操作:

<div class="boardpiece clickable" onclick="select(event, this);" ondblclick="open('5657849');"

使用longpress模拟双击,我完全没问题。这就是我的困惑开始的地方。如何告诉我的应用程序当用户对项目执行SingleTap时,它需要激活网站所要求的“onclick”?我还需要告诉应用程序,当用户对同一项目执行longpress时,激活您在网站编码中看到的“ondblclick”事件?

这是我的活动代码:

import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.SslErrorHandler;
import android.net.http.SslError;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;

public class MainActivity extends Activity{
    WebView webview;    

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webview = (WebView) findViewById(R.id.webview);   
        //Do we want/need to enable Java?
        webview.getSettings().setJavaScriptEnabled(true); 
        //Here we allow for zoom controls - pinch
        webview.getSettings().setBuiltInZoomControls(true);
        //Here we remove the zoom control buttons - requires API 11
        webview.getSettings().setDisplayZoomControls(false);
        //Here we clear the Cache and SSL Preferences       
        webview.clearCache(true);
        webview.clearSslPreferences();
        //Do we need to enable scroll bars to allow people to scroll left and right?        
        webview.setHorizontalScrollBarEnabled(true);
        webview.setVerticalScrollBarEnabled(true);
        webview.setWebViewClient(new WebViewClient());
        webview.loadUrl("https://website");

        final GestureDetector gd = new GestureDetector(new MyGestureDetector());
        View.OnTouchListener gl = new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                return gd.onTouchEvent(event);
            }
        };
        webview.setOnTouchListener(gl);
    }

    class MyGestureDetector extends SimpleOnGestureListener {    
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            Log.i("", "DoubleTap");
            return true;
        }   

        public boolean onSingleTap(MotionEvent e) {
            Log.i("", "SingleTap");
            return true;
        }
    }    


// Ignore SSL certificate errors    
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        handler.proceed();
    }

//Would like to have a Menu Button to refresh the page - or really just bring you to the login page - for use when the session times out    
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(1, 1, 0, "Reload");
    //getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
    }

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
    case R.id.reload:
        webview.loadUrl("website");
        return true;
    }
    return super.onOptionsItemSelected(item);

}

}

1 个答案:

答案 0 :(得分:0)

我认为你看错了。而不是检测Android中的双击并尝试将其注入到您的Javascript中,您可能会检测到Javascript中的双击。只需保留最后一次点击的时间,如果它已经足够,则第二次点击是双击的一部分。