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");
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容