webview加载HTML文本,以及图片宽度适应、字体大小调整、退出清理

package com.demo.com.demoapplication;

import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.SslErrorHandler;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * Created by wy on 2018/7/20.
 */

public class WebActivity extends AppCompatActivity {

    private static final String mWebContent = ""
            + "<!-- EM_StockImg_Start --><p style=\"text-align:center;\"><img src=\"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1532084238807&di=f0917afa525c97f1158c9e987d763666&imgtype=0&src=http%3A%2F%2Fs2.sinaimg.cn%2Fmw690%2Fc27074e1t7c72ec75b661%26690\"" +
            " border=\"0\" alt=\"K图 000001_1\" data-code=\"K 000001|1|1\" style=\"border:#d1d1d1 1px solid;\" width=\"5"
            + "8\" height=\"276\" /></p><!-- EM_StockImg_End --><p>  <s"
            + "an id=\"Info.3257\">沪指</span>和<span id=\"Info.3259\">创业板指</span>双双宽幅震荡,盘面上,保险、钢铁和水泥板块涨幅居前,民航机场、环保、黄金、生物"
            + "苗等板块表现不佳,跌幅居前。截止发稿,沪指下跌0.29%;创业板指下跌0.63%。</p><p>  今日消息面:<br /></p><p>  1、<p>  <span class=\"info-lin"
            + " info-code=\"NW20180719909201215\">银保监会:大中型银行要加大信贷投放力度 降低小微企业融资成本</span></p><br /></p><p>  2、<p>  <s"
            + "an class=\"info-link\" info-code=\"NW20180719909330352\">全国首家!上海不动产信息查询向银行开放 炒房客无眠</span></p><br /></p>"
            + "  3、<p>  <span class=\"info-link\" info-code=\"NW20180719909186685\">央行窗口指导银行增配较低评级信用债 市场争议AA+债券流动性能否"
            + "复</span></p><br /></p><p>  4、<p>  <span class=\"info-link\" info-code=\"NW20180719909178311\">部委密集研讨扩大中"
            + "收入群体 一揽子新政正酝酿</span></p><br /></p><p>  5、<p>  <span class=\"info-link\" info-code=\"NW2018071990942809\">"
            + "PPP条例今年有望出台 防控地方政府债务风险文件正在研究</span></p><br /></p><p>  今天券商<span id=\"Info.318\">晨会</span>上,<span id"
            + "\"Info.3224\">分析师</span>表示,A股仍是存量格局,风险偏好难以明显回升,短期维持震荡行情。<br /></p><p>  <strong>华泰证券:</strong></p><p>"
            + "大部分投资者认为短期维持震荡行情,国内外风险因素仍较多,政策意图尚不明朗,缺乏上行动力,控制仓位,部分投资者会趁中报季调仓,逢高卖出逻辑有瑕疵的个股。也有少数投资者认为目前是底部区域,适合做长线投资"
            + "在下跌中逐渐加仓。个股选择上,部分投资者注重自下而上选股,关注能走出独立行情的细分行业龙头。</p><p>  <strong>东北证券:</strong></p><p>  受国内去杠杆、信用环境偏紧"
            + "生产和需求背离难持续、企业利润将缓降等影响,A股仍是存量格局,风险偏好难以明显回升。但目前估值偏低,供需矛盾不大,货币政策微调、财政政策有望更积极,反弹格局可期,但风险同存。如上述基本面因素,大方向"
            + "撑无风险资产表现,具有配置价值,但信用债预计难以明显有起色。无风险债券表现需注意三季度可能出现的供需矛盾以及美联储9月再加息(国内可能跟随“加息”)。</p>";

    private WebView webView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        initView();
    }

    private void initView(){
        webView = findViewById(R.id.webview);
        webView.setVisibility(View.VISIBLE);
        DisplayMetrics dm = getResources().getDisplayMetrics();
        int scale = dm.densityDpi;
        if (scale == 240) { //设置自动适配
            webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
        } else if (scale == 160) {
            webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
        } else {
            webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.CLOSE);
        }
        webView.setVerticalScrollBarEnabled(false);
        webView.getSettings().setJavaScriptEnabled(false);
        webView.getSettings().setBlockNetworkImage(false);
        webView.getSettings().setDefaultTextEncodingName("UTF-8");
        webView.setWebChromeClient(new WebChromeClient() {
        });
        webView.getSettings().setSupportZoom(true);//支持缩放
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);//不显示缩放按钮
        webView.setHorizontalScrollBarEnabled(false);
        webView.setVerticalScrollBarEnabled(false);

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed();
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }
        });
        webView.getSettings().setDomStorageEnabled(false);
        if (Build.VERSION.SDK_INT >= 21) {//同时允许HTTP和HTTPS
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
        findViewById(R.id.linear).setVisibility(View.VISIBLE);
        findViewById(R.id.btn_1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                loadContent();
            }
        });
        findViewById(R.id.btn_2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                loadContentFill();
            }
        });
    }

    /**
     * 加载原有数据
     */
    private void loadContent(){
        webView.loadDataWithBaseURL(null, mWebContent, "text/html", "utf-8", null);
    }

    /**
     * 通过适配,使图片宽度占满屏幕
     */
    private void loadContentFill(){
        String head = "<head><style>* {font-size:15px}{color:#212121;}img{max-width: 100%; width:auto; height: auto;}</style></head>";
        String resultStr = "<html>" + head + "<body>" + mWebContent + "</body></html>";
        webView.loadDataWithBaseURL(null, resultStr, "text/html", "utf-8", null);
    }

    @Override
    protected void onDestroy() {
        if (webView != null) {
            webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
            webView.clearHistory();
            ((ViewGroup) webView.getParent()).removeView(webView);
            webView.destroy();
            webView = null;
        }
        super.onDestroy();
    }
}

最后,有一个坑,千万不要短时间重复加载,会有小概率出现加载不全的情况。

demo地址:https://download.csdn.net/download/qq_24179679/10554342

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值