android Webview 的使用
private WebSettings webSettings; private JavaScriptInterface javascriptInterface;
javascriptInterface = new JavaScriptInterface(this); webSettings = webView.getSettings(); //是否支持js webSettings.setJavaScriptEnabled(true); // 设置支持缩放 webSettings.setSupportZoom(true); //显示图片时自适应屏幕大小,但是4.4以前好用,4,4以后不好用 //mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //weView中有链接,在当前 browser 中相应 webView.setWebViewClient(new MyWebViewClient()); //设置进度条,处理提示框 webView.setWebChromeClient(new MyWebChromeClient()); //添加监听 webView.addJavascriptInterface(javascriptInterface, "imagelistner"); webView.loadDataWithBaseURL(null,bean.getContent(), "text/html", "utf-8", null);
// js通信接口 public static class JavaScriptInterface { private Context context; public JavaScriptInterface(Context context) { this.context = context; } //点击图片回调方法 //必须添加注解,否则无法响应 @JavascriptInterface public void openImage(final String img) { System.out.println(img); Log.i("TAG", "响应点击事件!"); Intent intent = new Intent(); intent.putExtra("image", img); System.out.println(img); ((Activity) mContext).runOnUiThread(new Runnable() { @Override public void run() { showImg(img); } }); } public void showImg(final String img) { final AlertDialog dialog = new AlertDialog.Builder(mContext).create(); final ImageView imgView = getImageView(); Glide.with(mContext).load(img).placeholder(R.mipmap.loading_placeholder_img).crossFade().into(imgView); dialog.setView(imgView); dialog.show(); imgView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } private ImageView getImageView() { ImageView imgView = new ImageView(mContext); imgView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); imgView.setScaleType(ImageView.ScaleType.FIT_XY); return imgView; } }
private class MyWebViewClient extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // html加载完成之后,添加监听图片的点击js函数 addImageClickListner(); imgReset(); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } /** * 循环遍历标签中的图片 * js 语法 */ private void imgReset() { webView.loadUrl("javascript:(function(){" + "var objs = document.getElementsByTagName('img'); " + "for(var i=0;i<objs.length;i++) " + "{" + "var img = objs[i]; " + " img.style.maxWidth = '100%'; " + "}" + "})()"); } /** * 设置进度条和提示框 */ private class MyWebChromeClient extends WebChromeClient { //该方法中可以设置进度条 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); } //发方法中可以处理提示框 @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } } // 注入js函数监听 private void addImageClickListner() { // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,函数的功能是在图片点击的时候调用本地java接口并传递url过去 webView.loadUrl("javascript:(function(){" + "var objs = document.getElementsByTagName(\"img\"); " + "for(var i=0;i<objs.length;i++) " + "{" + " objs[i].onclick=function() " + " { " + " window.imagelistner.openImage(this.src); " + " } " + "}" + "})()"); }