WebView加载富文本内容,图片自适应且可查看大图

加载字符串图文富文本内容,显示效果如下图:

WebView加载富文本内容,图片自适应且可查看大图_第1张图片

初始化webview配置

 

private void initWebView(String mDesr){
        WebSettings mWebSettings;
        mContentWebView.setDefaultHandler(new DefaultHandler());
        mWebSettings = mContentWebView.getSettings();
        mWebSettings.setUseWideViewPort(true);
        mWebSettings.setDomStorageEnabled(true);
        mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
//        mWebView.getSettings().setSupportZoom(true);
        mWebSettings.setLoadWithOverviewMode(true);
        mWebSettings.setBuiltInZoomControls(false);
        mWebSettings.setDefaultTextEncodingName("UTF-8") ;
        mWebSettings.setBlockNetworkImage(false);
        //隐藏缩放工具
        mWebSettings.setDisplayZoomControls(false);

        String imgStyle = "";
        mDesr = imgStyle + mDesr + "";

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            mWebSettings.setMixedContentMode(mWebSettings.MIXED_CONTENT_ALWAYS_ALLOW);  //注意安卓5.0以上的权限
            int mPx = UIUtil.dip2px(act, 16);
            //设置img标签的css样式,是图片自适应屏幕大小
            mDesr = mDesr.replaceAll("18px", mPx + "px");
        }

        mContentWebView.loadDataWithBaseURL(null, mDesr, "text/html", "UTF-8", null);

        String[] mImageUrls = returnImageUrlsFromHtml(mDesr);
        mContentWebView.addJavascriptInterface(new MJavascriptInterface(this, mImageUrls), "imagelistener");
        mContentWebView.setWebViewClient(new MyTextViewWebViewClient());
    }

 

public String [] returnImageUrlsFromHtml(String desr) {
    List imageSrcList = new ArrayList();
    String htmlCode = desr;
    Pattern p = Pattern.compile("]*\\bsrc\\b\\s*=\\s*('|\")?([^'\"\n\r\f>]+(\\.jpg|\\.bmp|\\.eps|\\.gif|\\.mif|\\.miff|\\.png|\\.tif|\\.tiff|\\.svg|\\.wmf|\\.jpe|\\.jpeg|\\.dib|\\.ico|\\.tga|\\.cut|\\.pic|\\b)\\b)[^>]*>", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(htmlCode);
    String quote = null;
    String src = null;
    while (m.find()) {
        quote = m.group(1);
        src = (quote == null || quote.trim().length() == 0) ? m.group(2).split("//s+")[0] : m.group(2);
        imageSrcList.add(src);
    }
    if (imageSrcList == null || imageSrcList.size() == 0) {
        Log.e("imageSrcList","资讯中未匹配到图片链接");
        return null;
    }
    return imageSrcList.toArray(new String[imageSrcList.size()]);
}

 

public class MyTextViewWebViewClient extends WebViewClient {
    @Override
    public void onPageFinished(WebView view, String url) {
        view.getSettings().setJavaScriptEnabled(true);
        super.onPageFinished(view, url);
        addImageClickListener(view);//待网页加载完全后设置图片点击的监听方法
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        view.getSettings().setJavaScriptEnabled(true);
        super.onPageStarted(view, url, favicon);
    }
    private void addImageClickListener(WebView webView) {
        webView.loadUrl("javascript:(function(){" +
                "var objs = document.getElementsByTagName(\"img\"); " +
                "for(var i=0;i
public class MJavascriptInterface {
    private Activity mContext;
    private String [] imageUrls;
    public MJavascriptInterface(Activity context,String[] imageUrls) {
        this.mContext = context;
        this.imageUrls = imageUrls;
    }
    @android.webkit.JavascriptInterface
    public void openImage(String img) {
        //以下跳转你自己的大图预览页面即可
        ImageView imageView = new ImageView(mContext);

        ImageShowActivity.startImageActivity(mContext, imageView, img);
    }
}

1、有想做副业,业余开店的,推荐“贝店”,

     应用市场下载“贝店”,注册,输入邀请码 1530973, 即可体验!

2、另外可以关注我的公众号“生活与认知”;

WebView加载富文本内容,图片自适应且可查看大图_第2张图片

你可能感兴趣的:(Android中遇到的那些问题)