WebView

一些设置

//获取WebSettings对象
WebSettings settings = wv_web.getSettings();
//设置缩放按钮
settings.setBuiltInZoomControls(true);
//双击缩放
settings.setUseWideViewPort(true);

改变字体大小

// 改变webview字体大小
protected void changeTextSize ( int currentIndex){
    switch (currentIndex) {
        case 0:
            // 改变webview字体
            settings.setTextSize(TextSize.LARGEST);
            break;
        case 1:
            settings.setTextSize(TextSize.LARGER);
            break;
        case 2:
            settings.setTextSize(TextSize.NORMAL);
            break;
        case 3:
            settings.setTextSize(TextSize.SMALLER);
            break;
        case 4:
            settings.setTextSize(TextSize.SMALLEST);
            break;

        default:
            break;
    }
}

加载网页

wv_web.loadUrl(url);

加载完成监听

//监听WebView加载完成
wv_web.setWebViewClient(new WebViewClient() {
    //页面加载完成调用—重写onPageFinished
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);

        pb_progress.setVisibility(View.GONE);
    }
});

JavaScript调用java代码

html写法
button调用了一个方法windows.android.back()

Paste_Image.png

1支持JavaScript

// 支持Javascript—在loadUrl之前
settings.setJavaScriptEnabled(true);

2对象的方法想被JavaScript调用,必须加注解
@JavascriptInterface--方法名与调用的方法名一致

class JavaObject {
    //加注解
    // sdk 4.2 以上要求被JavaScript调用的方法,必须加@JavascriptInterface(考虑到安全)
    @JavascriptInterface
    // 方法与其调用的方法名一致
    public void back() {
        //把自己关闭掉
        finish();
    }
}

3给JavaScript传递java对象

// 给JavaScript传递java对象
// 参数1 传递的对象 ,参数2 对象名字,在JavaScript中可以使用 window.参2
wv_web.addJavascriptInterface(new JavaObject(), "Android");
// 任何HTML中都有window这个对象,

4在html文档中调用java代码

window.Android.back()

Java中调用JavaScript代码

HTML文档的写法

Paste_Image.png

1支持JavaScript

// 支持Javascript—在loadUrl之前
settings.setJavaScriptEnabled(true);

调用Javascript代码

//WebView默认不支持alert弹框--需要设置
wv_web.setWebChromeClient(new WebChromeClient());

//调用JavaScript代码
wv_web.loadUrl("javascript:wave()");
//javascript:方法名

设置点击链接

处理源码里的连接

webView.setWebViewClient(getWebViewClient());//设置client
//复写方法
public WebViewClient getWebViewClient () {

    return new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            showUrlRedirect(view.getContext(), url);
            return true;// 自己处理html里面link
        }
    };
}

public void showUrlRedirect (Context context, String url){
    Toast.makeText(context, url, Toast.LENGTH_SHORT).show();
}

组拼HTML

不变的源码直接考到本地

Paste_Image.png

获取文档—解析xml

@Override
public void onResponse(Call call, Response response) throws IOException {
    String result = new String(response.body().string());
    final NewsDetail newsDetail = XmlUtils.toBean(NewsDetail.class, result.getBytes());
    // 解析网络返回的数据,把要展示的内容拼接
    NewsDetailActivity.this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            fillWebViewBody(newsDetail.getNews());
        }
    });
}

Html-字符串拼接Body—添加stringbuffer

private void fillWebViewBody(News mNews) {
    mTvTitle.setText(mNews.getTitle());
    mTvSource.setText(mNews.getAuthor());
    mTvTime.setText(StringUtils.friendly_time(mNews.getPubDate()));
    StringBuffer body = new StringBuffer();
    body.append(UIHelper.setHtmlCotentSupportImagePreview(mNews.getBody()));

    body.append(UIHelper.WEB_STYLE).append(UIHelper.WEB_LOAD_IMAGES);

    // 更多关于***软件的信息
    String softwareName = mNews.getSoftwareName();
    String softwareLink = mNews.getSoftwareLink();
    if (!StringUtils.isEmpty(softwareName)
            && !StringUtils.isEmpty(softwareLink))
        body.append(String
                .format("<div id='oschina_software' style='margin-top:8px;color:#FF0000;font-weight:bold'>更多关于: <a href='%s'>%s</a> 的详细信息</div>",
                        softwareLink, softwareName));

    // 相关新闻
    if (mNews != null && mNews.getRelatives() != null
            && mNews.getRelatives().size() > 0) {
        String strRelative = "";
        for (News.Relative relative : mNews.getRelatives()) {
            strRelative += String.format(
                    "<a href='%s' style='text-decoration:none'>%s</a><p/>",
                    relative.url, relative.title);
        }
        body.append("<p/><div style=\"height:1px;width:100%;background:#DADADA;margin-bottom:10px;\"/>"
                + String.format("<br/> <b>相关资讯</b> <div><p/>%s</div>",
                strRelative));
    }
    body.append("<br/>");

    try {
        File file = new File(Environment.getExternalStorageDirectory(),
                String.format("/OSChina/html/%d.html", mNews.getId()));
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(body.toString().getBytes());
        fos.close();
        System.out.println(body);
        System.out.println("save success! :" + file.getPath());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Webview显示成html—支持拼接源码

if (webView != null) {
    // webview 加载字符串(拼接后的字符串) 显示html
    webView.loadDataWithBaseURL(null, body.toString(), "text/html",
            "utf-8", null);
    // webView.loadDataWithBaseURL(null, mNews.getBody(), "text/html",
    // "utf-8", null);
    // webView.loadUrl("http://10.0.2.2:8080/oschina/detail/news_detail/64311.xml");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容