在微信里看文章,文章都是网页,但长按图片后会弹出一个对话框让用户选择要进行的操作,这个操作我想很多人都很熟悉,那天笔者竟突然觉得有些神奇,难道说WebView有相应的API可以对页面上的资源类型进行区分吗?查了一下资料后发现确实如此,特此记录一下:
//长按处理各种类型的事件
mWebView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
WebView.HitTestResult result = mWebView.getHitTestResult();
if (null == result)
return false;
int type = result.getType();
switch (type) {
case WebView.HitTestResult.EDIT_TEXT_TYPE: // 选中的文字类型
break;
case WebView.HitTestResult.PHONE_TYPE: // 处理拨号
break;
case WebView.HitTestResult.EMAIL_TYPE: // 处理Email
break;
case WebView.HitTestResult.GEO_TYPE: // 地图类型
break;
case WebView.HitTestResult.SRC_ANCHOR_TYPE: // 超链接
break;
case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE: // 带有链接的图片类型
case WebView.HitTestResult.IMAGE_TYPE: // 处理长按图片的菜单项
String url = result.getExtra();
if (url != null && URLUtil.isValidUrl(url)) {
//弹框
}
return true;
case WebView.HitTestResult.UNKNOWN_TYPE: //未知
break;
}
return false;
}
});
基于这个东东,我们可以对网页不同的资源进行不同的处理操作,只要你封装得好,你可以打造一个功能齐全的WebView,当然,建议使用腾讯X5内核替换系统自带的WebView!