【问题标题】:Limit WebView touch handling to links将 WebView 触摸处理限制为链接
【发布时间】:2011-06-20 18:00:30
【问题描述】:

是否可以在包含它的 Activity 中通过 WebView 捕获触摸事件,而不会丢失链接功能?

考虑一个显示带有链接的网页的 WebView。如果用户点击链接,我希望 WebView 处理触摸事件。如果用户点击其他地方,我希望 Activity 处理触摸事件。

如何做到这一点?

【问题讨论】:

  • 也对这个问题的实现感到好奇。浏览器(我假设)只不过是一个 web 视图,用户界面覆盖在它上面,它可以包括按钮。此外,使用地图视图,放大/缩小按钮只是覆盖在地图视图的顶部。从更广泛的意义上说,我猜你有兴趣在任何视图上覆盖按钮(除非你特别有 webview 的怪癖)
  • @Gimbl 我完全重写了这个问题。如果可能的话,我会删除它并发布一个新的。

标签: android android-activity webview touch


【解决方案1】:

是的。

(除非您的问题更具体,否则我无法详细说明。)

【讨论】:

  • 是的,对不起。有史以来最糟糕的问题。很快就会澄清。
【解决方案2】:

如果我正确理解您的问题,似乎很难解释 onTouchEvent() 中的某个链接是否为链接,因为它所知道的只是 X、Y 坐标(不是 html)。但是,在我看来,您似乎可以使用 WebView 中的 javascript 绑定片段来让 javascript 决定该内容是否为链接并采取相应措施。再说一次,我以前没有做过,也没有测试过……只是大声思考。

【讨论】:

    【解决方案3】:

    初始化 WebView 时,尝试:

    mWebView.setWebViewClient(new WebViewClientOverrider());
    

    然后创建一个私有类:

    private class WebViewClientOverrider extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            //TODO handle the link  
            return true;
        }
    }
    

    最后,将 TODO 处理链接 行替换为您自己的代码以处理链接选择。

    【讨论】:

      【解决方案4】:

      或者您可以监控堆栈跟踪:

      android.webkit.CallbackProxy.uiOverrideUrlLoading()
      

      请参阅http://www.javapractices.com/topic/TopicAction.do?Id=78,了解如何从可抛出对象(在重写的 WebView.loadUrl() 方法中创建)确定您的堆栈跟踪。

      【讨论】:

        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-18
        • 2011-09-10
        相关资源
        最近更新 更多