android Webview 的使用
PRivate WebSettings webSettings;private javaScriptInterface JavascriptInterface;javascriptInterface = new JavaScriptInterface(this);webSettings = webView.getSettings();//是否支持jswebSettings.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); " + " } " + "}" + "})()");}
新闻热点
疑难解答