Android WebView 使用介绍

接下来打算写写目前对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的后退处理:

    @Override
    public 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值