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文档的写法

WebView_第1张图片
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

不变的源码直接考到本地

WebView_第2张图片
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("
更多关于: %s 的详细信息
", softwareLink, softwareName)); // 相关新闻 if (mNews != null && mNews.getRelatives() != null && mNews.getRelatives().size() > 0) { String strRelative = ""; for (News.Relative relative : mNews.getRelatives()) { strRelative += String.format( "%s

", relative.url, relative.title); } body.append("

" + String.format("
相关资讯

%s

", strRelative)); } body.append("
"); 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");
}

你可能感兴趣的:(WebView)