WebView简介

WebView简介

WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用WebKit渲染引擎加载显示网页

当前主流的浏览器内核

Trident Gecko WebKit Prosto

  1. 实例化WebView的对象
    (1)webview=new WebView(context);
    setContentView(webview);
    (2)setContentView (R.layout.activity_java_call_javascript);
    webview = (WebView) findViewById(R.id.webview);
  2. 设置显示的网页
    1. webview.loadUrl
    2. webview.loadData
    3. webview.loadDataWithBaseURL
  3. 用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
    //设置回退
    //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
    webview.goBack(); //goBack()表示返回WebView的上一页面
    return true;
    }
    return false;
    }
  4. 如果访问的页面中有Javascript,则webview必须设置支持Javascript。
    WebSettings webSetting = webview.getSettings();
    webSetting.setJavaScriptEnabled(true);
  5. 如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象。

    webview.setWebViewClient(new WebViewClient() {
    
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    
    });
    
  6. 如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。
    webview.requestFocusFromTouch();

  7. 原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置WebView的DownloadListener,通过实现自己的DownloadListener来实现文件的下载。

    1、设置WebView的DownloadListener:
    webView.setDownloadListener(new MyWebViewDownLoadListener());

    2、实现MyWebViewDownLoadListener这个类,具体可以如下这样:
    private class MyWebViewDownLoadListener implements DownloadListener {

    // 这只是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载
    @Override
    public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
    long contentLength) {
    Uri uri = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    }

    }

WebSettings的常用方法介绍

  1. setJavaScriptEnabled(true);

      //支持js脚步
    
  2. setPluginsEnabled(true);

      //支持插件
    

3 setUseWideViewPort(false);

     //将图片调整到适合webview的大小

4 setSupportZoom(true);

     //支持缩放

5 setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

        //支持内容从新布局

6 supportMultipleWindows();

    //多窗口

7 setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

    //关闭webview中缓存

8 setAllowFileAccess(true);

    //设置可以访问文件

9 setNeedInitialFocus(true);

    //当webview调用requestFocus时为webview设置节点
 webSettings.setBuiltInZoomControls(true);

    //设置支持缩放

10 setJavaScriptCanOpenWindowsAutomatically(true);

       //支持通过JS打开新窗口

11 setLoadsImagesAutomatically(true);

       //支持自动加载图片

WebViewClient的方法全解

1 doUpdateVisitedHistory(WebViewview,Stringurl, boolean isReload)

     (更新历史记录)

2 onFormResubmission(WebViewview,MessagedontResend,Messageresend)

     (应用程序重新请求网页数据)

3 onLoadResource(WebViewview,Stringurl)

        在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。

4 onPageStarted(WebViewview,Stringurl,Bitmapfavicon)

       这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告

    诉用户程序在等待网络响应。

5 onPageFinished(WebViewview,Stringurl)

       在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关

   闭loading 条,切换程序动作。

6 onReceivedError(WebViewview, int errorCode, Stringdescription,StringfailingUrl)

   (报告错误信息)

7 onReceivedHttpAuthRequest(WebViewview,HttpAuthHandlerhandler,Stringhost,

   Stringrealm)(获取返回信息授权请求)

8 onReceivedSslError(WebViewview,SslErrorHandlerhandler,SslErrorerror)

   重写此方法可以让webview处理https请求。

9 onScaleChanged(WebViewview, float oldScale, float newScale)

    (WebView发生改变时调用)

10 onUnhandledKeyEvent(WebViewview,KeyEventevent)

  (Key事件未被加载时调用)

11 shouldOverrideKeyEvent(WebViewview,KeyEventevent)

   重写此方法才能够处理在浏览器中的按键事件。

12 shouldOverrideUrlLoading(WebViewview,Stringurl)

    在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做 很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。

显示视图

1.loadUrl
1 网络内容
LoadUrl直接显示网页内容(单独显示网络图片)
2APK包内文件
LoadUrl显示APK中Html和图片文件
(1)把网页写在工程根目录下的assets目录下
webview.loadUrl(“file:///android_asset/JavaCallJS1.html”);
(2)网页
webview.loadUrl(“http://10.0.2.2:8080/JavaCallJS1.html“);
2. webview.loadData
1 网络内容
LoadData显示中文网页内容(含空格的处理)
2APK包内文件
LoadData(loadDataWithBaseURL)显示APK中图片和文字混合的Html内容
注意 :
css中经常用’#’, ‘%’, ‘\’,’?’等字符,我们需要用UrlEncoder编码为%23, %25, %27, %3f 。loadData()中的html data中不能包含’#’, ‘%’, ‘\’, ‘?’四中特殊字符,出现这种字符就会出现解析错误,显示找不到网页还有部分html代码。

  1. webview.loadDataWithBaseURL
    data为string类型的html代码
    1 webView.loadData(URLEncoder.encode(data, “utf-8”), “text/html”, “utf-8”);
    这样一些背景效果什么的都不怎么好看了。不推荐。
    2 webView.loadDataWithBaseURL(null,data, “text/html”, “utf-8”, null);
    这样就会完美解析了。

java调用js

webview.loadUrl(“javascript:javaCallJs()”);
javaCallJs()//是



<script type="text/javascript">
    function javaCallJs(){

         document.getElementById("content").innerHTML +=   
             "<br\>java调用了js无参函数";
    }



</script>

js调用Java

// “android”是与js对应的Key
1 webview.addJavascriptInterface(new Video(), “android”);
private class Video {
@JavascriptInterface//必须加注解
public void playVideo(int itemid, String videourl, String itemtitle) {
// 把系统所有的播放调起来
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(videourl), “video/*”);
startActivity(intent);

    }

}

2 webView.addJavascriptInterface(getHtmlObject(), “android”);

private Object getHtmlObject() {
Object insertObj = new Object() {

        public void JavacallHtml() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    webView.loadUrl("javascript: showFromHtml()");
                    Toast.makeText(JavaCallJSActivity2.this, "clickBtn",
                            Toast.LENGTH_SHORT).show();
                }
            });

    return insertObj;
}

}

http://blog.csdn.net/u011415782/article/details/21782273
http://www.360doc.com/content/14/0611/13/15210553_385676271.shtml
http://blog.csdn.net/i_lovefish/article/details/8124807

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值