【问题标题】:Web view detect on touch only when no link is clicked android仅当没有单击链接时,才在触摸时检测 Web 视图 android
【发布时间】:2015-10-13 05:35:49
【问题描述】:

我在 webview 中加载静态 html 和 url。此外,我的 web 视图是可点击的,它的点击意图被触发。

我想实现-当在 webview 中点击 url/html 中的链接时 链接应该在 webview 中加载。但是当点击 webview 并且没有链接时 被点击的意图应该被解雇。

我需要实现 onTouch 监听器以检测 webview 上的触摸和触发意图。但是如果我实现 ontouch 那么内部链接永远不会在 webview 的 html/url 中打开

public class WebViewHotspotClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
//        return super.shouldOverrideUrlLoading(view, url);
//        return true; does not open link
        return false;//opens link in web view 
    }
}

    hotspotWebview.setWebViewClient(new WebViewHotspotClient());
//        hotspotWebview.setOnTouchListener(new OnTouchListener() {
//            @Override
//            public boolean onTouch(View view, MotionEvent motionEvent) {
//                if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
//                    startActivity(new Intent(ImageFrameActivity.this, HotspotActivity.class));
//                }
//                return false;
//            }
//        });

谢谢!

【问题讨论】:

    标签: android webview android-webview


    【解决方案1】:

    这里发生的情况是,当您将 ontouchlistener 分配给整个 web 视图时,其他元素会在它下面,并且它们没有得到任何触摸或点击。要解决此问题,您可以执行以下操作

    public class MyWebViewClicker extends Activity implements OnTouchListener,     Handler.Callback {
    
    private static final int CLICK_WEBVIEW = 1;
    private static final int CLICK_URL = 2;
    
    private final Handler handler = new Handler(this);
    
    private WebView webView;
    private WebViewClient webviewclient;
    boolean donext=false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.web_view);
    
    webView = (WebView)findViewById(R.id.myweb);
    webView.setOnTouchListener(this);
    
    webviewclient = new WebViewClient(){ 
        @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { 
            handler.sendEmptyMessage(CLICK_URL);
            return false;
        } 
    }; 
    
    webView.setWebViewClient(webviewclient);
    webView.setVerticalScrollBarEnabled(false);
    webView.loadUrl("http://www.example.com");
    }
    
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    if (v.getId() == R.id.myweb && event.getAction() == MotionEvent.ACTION_DOWN)  {
        handler.sendEmptyMessageDelayed(CLICK_WEBVIEW, 500);
    }
    return false;
    }
    
    @Override
    public boolean handleMessage(Message msg) {
    if (msg.what == CLICK_URL){
        Toast.makeText(this, "URL is clicked", Toast.LENGTH_SHORT).show();
        donext=true;
        return true;
    }
    if (msg.what == CLICK_WEBVIEW){
        if(donext==true)
        { 
          //do nothing
        }else{
        Toast.makeText(this, "WebView is clicked", Toast.LENGTH_SHORT).show();
         }
        return true;
    }
    return false;
    }
    }
    

    【讨论】:

    • 谢谢,这段代码能够检测到什么时候点击了 url,但是当点击 url 后,CLICK_WEBVIEW 也会立即触发,导致每次点击 url 时都会触发意图,请帮助
    • 我添加了一个布尔变量来检查是否点击了 url,如果是,则在 webview_click 中没有做任何事情。编辑答案。我认为它会帮助你@RachitaNanda
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多