13、Android Webview图片自适应屏幕解决方案

图片过大,通过设置webview后字体又超小。

网上的方法千篇一律

尝试过程:

1、设置

//    mWebview.getSettings().setUseWideViewPort(true);//让webview读取网页设置的viewport,pc版网页
//    mWebview.getSettings().setLoadWithOverviewMode(true);

字体变得超级小,不是想要的效果

2、效果同上

// 没卵用  ---
mWebview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);

3、CSS控制,尝试加入代码

  /**
     * 拼接html字符串片段
     * @param bodyHTML
     * @return
     */
    private  String getHtmlData(String bodyHTML) {
        String head = "<head>" +
                "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\"> " +
                "<style>img{max-width:100% !important; width:auto; height:auto;}</style>" +
                "</head>";
        return "<html>" + head + "<body style:'height:auto;max-width: 100%; width:auto;'>" + bodyHTML + "</body></html>";
    }

使用这种方法 就让webview加载图片自适应屏幕了。

注意:需要对webview 设置:

webView.getSettings().setJavaScriptEnabled(true);


下面的方法没使用过不知道是否可以!(备用吧)

4、自己计算图片的高度,然后出现了以下代码

动态缩放图片的高度到webview的宽度()

主要是解析出height、width属性,然后重新赋值。

    /** 
         * 修改Img标签将Html文本的图片自适应屏幕 
         * @param mHtml             源代码 
         * @param mContex 
         * @param WebviewWidth      webview控件的宽度。 
         * @return 
         */  
        public static String resizeImageHtml(String mHtml,Context mContex,int WebviewWidth){  
            //解析出<img>标签  
            String[] mImgs=mHtml.split("<img");  
            StringBuilder mRstHtml=new StringBuilder();  
            if(mImgs.length>0){  
                for (int i = 0; i < mImgs.length; i++) {  
                    String mImg=mImgs[i];  
                    //过滤掉  
                    int start=mImg.indexOf("style=");  
                    int end=mImg.indexOf("/>");  
                    if(start!=-1&&end!=-1){//认定为Img标签  
                        String mStyle=mImg.substring(mImg.indexOf("style="),mImg.indexOf("/>"));  
                        String[] mMap=mStyle.split(";");  
                        LogCat.w(Arrays.toString(mMap));  
                        //获取图片原始宽高  
                        String mHeight="";  
                        String mWidth="";  
                        for (String mKey : mMap) {  
                            if(mKey.contains("height")){  
                                mHeight=mKey.substring(mKey.indexOf("height:")+"height:".length()).replaceAll("[^0-9]","");  
                            }else if(mKey.contains("width")){  
                                mWidth=mKey.substring(mKey.indexOf("width:")+"width:".length()).replaceAll("[^0-9]","");;  
                            }  
                        }  

                        float mImgW=Float.parseFloat(mWidth);  
                        float mImgH=Float.parseFloat(mHeight);;  
                        float mWebW=Utils.px2dip(mContex,WebviewWidth);  
                        if(mImgW>mWebW){//需要缩放  
                            float mScale=mImgW/mWebW;//获得缩放倍率  
                            mImgW=mWebW;  
                            mImgH=mImgH/mScale;  
                            mImg=mImg.replace(mHeight,mImgH+"").replace(mWidth,mImgW+"");  
                        }  
                        LogCat.w("Result=height:"+mImgH+"width:"+mImgW);  
                    }  
                    if(i==mImgs.length-1){  
                        mRstHtml.append(mImg);  
                    }else{  
                        mRstHtml.append(mImg).append("<img");  
                    }  
                }  
            }else{  
                mRstHtml.append(mHtml);  
            }  
            return mRstHtml.toString();  
        }  

辅助方法:

public static int dip2px(Context context,float dpValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (dpValue * scale + 0.5f);  
    }  
    public  static int px2dip(Context context, float pxValue){  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int)(pxValue / scale + 0.5f);  
    }

参考来源:

【Android学习笔记】Webview图片自适应屏幕终极解决方案

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值