在WebView中加載的是Html也面,在開發(fā)中都是Web前端人員寫好以后給個鏈接我們去用webView進行l(wèi)oadUrl。但是有時突然產品想讓你把加載回來的圖片進行大圖的展示,比如單擊或者長按查看大圖,但是webView控件的點擊事件并沒有作用?。。∫韵率菍崿F的思路
- 首先我們拿到html中加載圖片的標簽img.
- 然后取出其對應的src屬性
- 循環(huán)遍歷設置圖片的點擊事件
- 將src作為參數傳給java代碼
//java回調js代碼,不要忘了@JavascriptInterface這個注解,不然點擊事件不起作用
mWebView.addJavascriptInterface(new JsCallJavaObj() {
@JavascriptInterface
@Override
public void showBigImg(String url) {
Toast.makeText(mContext, "圖片路勁"+url, Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext, BigImageActivity.class);
intent.putExtra(Constants.IMG_URL,url);
startActivity(intent);
}
},"jsCallJavaObj");
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
setWebImageClick(view);
}
});
/**
* 設置網頁中圖片的點擊事件
* @param view
*/
private void setWebImageClick(WebView view) {
String jsCode="javascript:(function(){" +
"var imgs=document.getElementsByTagName(\"img\");" +
"for(var i=0;i<imgs.length;i++){" +
"imgs[i].onclick=function(){" +
"window.jsCallJavaObj.showBigImg(this.src);" +
"}}})()";
mWebView.loadUrl(jsCode);
}
/**
* Js調用Java接口
*/
private interface JsCallJavaObj{
void showBigImg(String url);
}
實現功能的核心就是這段Js代碼,也就是jsCode這個變量。通過document對象的getElementsByTagName方法去獲取到img標簽。然后通過循環(huán)去遍歷設置其對應的點擊事件。
window.jsCallJavaObj.showBigImg(this.src) 其中jsCallJavaObj是我們在java代碼中所定義的一個接口的對象,showBigImg()是這個接口中的回調方法。this.src就是當前點擊圖片的url.
注意:上面的js代碼書寫一定不能有誤,不然就做了無用功了,以javascript:(參數)開始,以()結束。
原文鏈接:https://blog.csdn.net/Jiang_Rong_Tao/article/details/58586041