Android WebView 使用介绍

来源:互联网 发布:短域名源码 编辑:程序博客网 时间:2024/06/05 16:09

接下来打算写写目前对WebView的了解,以及它相关的使用,介绍几个重要的方法,和使用中应该注意的事宜。

内容简介:

  • 怎么new WebView(搞笑了、、、)!

  • webChromeClient&&webViewClient的重要方法

    • url加载处理
    • 进度条设置
    • tittle设置
    • 错误处理
    • 全屏设置
  • Android&JS的互调

  • WebView的后退处理

布局时的注意事项:

It is recommended to set the WebView layout height to a fixed value or to MATCH_PARENT instead of using WRAP_CONTENT. When using MATCH_PARENT for the height none of the WebView’s parents should use a WRAP_CONTENT layout height since that could result in incorrect sizing of the views.

意思就是建议我们要使用match_parent的布局,并且match_parent时,它的父布局不要是wrap_content!

  • 1.创建一个WebView,加载一个url

    WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadUrl("http://www.lovejjfg.com");

这样的话,其实就有效果了!就是纯粹的加载webPage的效果!

但是请注意非常重要的一点:添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

  • 2.WebView中重要的两个Client:

     WebChromeClient webChromeClient = new WebChromeClient() {        //加载进度改变的回调         @Override        public void onProgressChanged(WebView view, int newProgress) {            super.onProgressChanged(view, newProgress);            if (newProgress == 100) {                mPb.setVisibility(View.GONE);            } else {                mPb.setProgress(newProgress);            }        }        //获取tittle        @Override        public void onReceivedTitle(WebView view, String title) {            super.onReceivedTitle(view, title);        }        //这三个方法在WebView需要全屏播放是需要复写。。。。        @Override        public void onShowCustomView(View view, CustomViewCallback callback) {            super.onShowCustomView(view, callback);        }        @Override        public void onHideCustomView() {            super.onHideCustomView();        }        @Override        public View getVideoLoadingProgressView() {            return super.getVideoLoadingProgressView();        }    };    WebViewClient webViewClient = new WebViewClient() {        //网页加载完成回调         @Override        public void onPageFinished(WebView view, String url) {            super.onPageFinished(view, url);        }        public void onReceivedError(WebView view, int errorCode,                                    String description, String failingUrl) {        //页面加载错误的时候回调        }        //我们是否处理url加载        @Override        public boolean shouldOverrideUrlLoading(WebView view, String url) {            mTopSlidWebView.loadUrl(url);            return true;        }        //webView开始加载        @Override        public void onPageStarted(WebView view, String url, Bitmap favicon) {            super.onPageStarted(view, url, favicon);            mPb.setVisibility(View.VISIBLE);        }    };

shouldOverrideUrlLoading()的方法其实很重要,如果我们需要处理url,就需要返回true,一般的写法就是在这里更具url的处理逻辑:

if (Uri.parse(url).getHost().equals("www.lovejfg.com")) {        view.loadUrl(url);        return true;    }else{        //doSomething..}

  • 3.然后说说webViewJs和本地互调:

WebView默认是不支持JavaScript的,所以要使用的话,第一步肯定是打开 开关

WebView myWebView = (WebView) findViewById(R.id.webview);WebSettings webSettings = myWebView.getSettings();webSettings.setJavaScriptEnabled(true);

好了,这样就可以使用js了!

 mWebView.addJavascriptInterface(new JsCallback() {        @JavascriptInterface        public void onJsCallback() {            Toast.makeText(getApplicationContext(), "XXXXXXXXX", Toast.LENGTH_LONG).show();        }    }, "demo");

定义接口:

public interface JsCallback {    @JavascriptInterface    public void onJsCallback();}

demo是你对应的调用的文件名称!

这里需要注意:如果你的版本是API17或者更高,那么在js的回调方法上面必须添加@JavascriptInterface的注解,不然的话,这个方法将无法回调!

  • demo文件的相关代码(可以直接copy):





    /* This function is invoked by the activity */
    function showAlert() {
    alert("Android调用Js啦");
    }




咳咳,这里需要注意onclick方法的写法:window.demo.onJsCallback(),以window开头,后面接你html的名称,最后这个 onJsCallback()其实就是你在接口中定义的方法!!

点击第一个,是js调用Android的本地方法,你完全可以在这里打电话,开页面,发广播。。。

点击第二个,是调用js的showAlert()的方法。


  • 4.WebView的后退处理:

    @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    // 检测是back并且WebView可以后退    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {        myWebView.goBack();        return true;    }return super.onKeyDown(keyCode, event);}

OK!更多的请参考—>官方文档(其实我也是搬运工啦!!)

其实还有错误处理没有讲解,下一篇来写一写吧!

0 0
原创粉丝点击