我正在开发一款在WebView中显示内容的Android应用。内容包含链接,这些链接通过自定义WebViewClient处理,并使用javascript和shouldOverrideUrlLoading()方法来跟踪链接,具体取决于链接。
问题在于:
我想处理不同的点击次数,具体取决于点击发生在WebView上的位置。特别是,我想在用户点击WebView时进行一些UI更改,但不要点击链接。
我发现onTouch方法在调用shouldOverrideUrlLoading()方法之前完成并完成(包括super.onTouch),我找不到任何在WebView post-shouldOverrideUrlLoading()上运行的方法的指示。我也在使用GestureDetector,再次,在触发了shouldOverrideUrlLoading()代码之前,它的onSingleTapUp()方法完成了。
在完成事件之前,无论是否运行了shouldOverrideUrlLoading()代码,都必须注意WebView上发生单击的时间。
任何人都有关于在哪里看的提示? 任何人都知道在执行了shouldOverrideUrlLoading()代码之后在WebView上调用的执行点?
谢谢, 戴尔。
答案 0 :(得分:2)
我认为您应该可以使用onTouch(),在那里你可以查看它是否是使用点击的链接:
HitTestResult result = wv.getHitTestResult();
url = result.getExtra();
如果是url,则从onTouch()返回false,以便将其传递给shouldOverrideUrlLoading();如果它不是一个url然后用它做任何你想做的事情并返回true,那么系统知道你消耗了这个事件。
答案 1 :(得分:2)
对于那些打同一场战斗的人来说,这是为我解决这个问题的示例代码。
private GestureDetector.SimpleOnGestureListener _simpleOnGestureListener = new GestureDetector.SimpleOnGestureListener()
{
/* ... */
@Override
public boolean onSingleTapUp(MotionEvent e)
{
HitTestResult htResult = getHitTestResult();
if (htResult != null && htResult.getExtra() != null)
{
// The click was on a link! Return true so to bypass processing.
return true;
}
/**
*
* Do your stuff
*
*/
return super.onSingleTapUp(e);
}
}
答案 2 :(得分:1)
您可以将javascript onclick代码添加到回调到您活动的html的最外层元素。
在您的活动中,您需要:
private void initializeClickableWebView( WebView webView, String innerHtml ) {
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(this, "jsBridge");
String html = "<html><body><div onclick=\"window.jsBridge.processClick();\">" +
innerHtml +
"</div></body></html>";
webView.loadDataWithBaseURL("file:///android_asset/", html,
"text/html", "utf-8", null);
}
private void processClick() {
Log.d( "webView", "processClick()" );
}