《第一行代码-Android》学习笔记(二十一)WebView控件总结【修改】

这里写图片描述

1.加载页面

1.1.web资源

 webview.loadUrl("http://192.168.1.100:8080/Web/index.html")

1.2.本地资源

本地文件使用:webView.loadUrl("file://android_asset/XX.html");
本地文件存放位置:assets文件夹中

2.监听页面加载状态,提高用户体验

        // 监听加载是否完成
        webview.setWebChromeClient(new WebChromeClient()
        {
            @Override
            public void onProgressChanged(WebView view, int newProgress)
            {
                if(newProgress == 100)
                {
                    // 网页加载完成,关闭progressdialog
                    closeDialog();
                }
                else
                {
                    // 加载中,打开progressdialog
                    openDialog(newProgress);
                }

            }
        });

     protected void closeDialog()
        {
            if(dialog!=null&&dialog.isShowing()){
                dialog.dismiss();
                dialog=null;
        }
    }

    protected void openDialog(int newProgress)
    {
        if(dialog == null)
        {
            dialog = new ProgressDialog(this);
            dialog.setTitle("加载中...");
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setProgress(newProgress);
            dialog.setCancelable(false);
            dialog.show();
        }else{
            dialog.setProgress(newProgress);
            dialog.show(); 
        }
    }

3.Android调用js

3.1.android代码

// activity调用webview页面中的js 因为是网络请求,需要开启线程执行 这里使用了handler
        findViewById(R.id.ask_js_btn).setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                mHandler.post(new Runnable()
                {
                    public void run()
                    {
                        //执行页面的某个js方法
                        webview.loadUrl("javascript:wave()");
                    }
                });
            }
        });

3.2.页面js代码

<script type="text/javascript">
    function wave() {       
        document.getElementById("droid").src="portrait1.jpeg";       
    };    
</script>

4.js调用Android方法

4.1.js代码

<a onClick="window.demo.clickOnAndroid()"> 
    <img id="droid"src="portrait2.jpeg"/>
        <br>Click me!
</a>

4.2.android代码

//addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),
//作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。
 webview.addJavascriptInterface(new Object()
        {
            public void clickOnAndroid()
            {
                mHandler.post(new Runnable()
                {
                    public void run()
                    {
                        Toast.makeText(WebActivity.this, "页面点击了!", Toast.LENGTH_SHORT).show();
                        webview.loadUrl("javascript:wave()");
                    }
                });
            }
        }, "demo");

5.提升webview浏览网页速度提升

5.1.代码实现

//设置webview优先使用缓存加载
webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

5.2.缓存位置

data/data/包名/cache;data/data/包名/database   ===>缓存在这个里面
如果我们要清缓存,只要清除这两个文件夹就可以了;

6.注意点总结

1.网络权限的设置

AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。

2.JavaScript属性开关设置

如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);  

3.是否新开android浏览器打开连接设置

如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
    mWebView.setWebViewClient(new WebViewClient(){       
                        public boolean shouldOverrideUrlLoading(WebView view, String url) {       
                            view.loadUrl(url);       
                            return true;       
                        }       
    }); 

6.4.4.系统BACK键功能拦截

如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身;
如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
    public boolean onKeyDown(int keyCode, KeyEvent event) {       
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       
            mWebView.goBack();       
                   return true;       
        }
        else if((keyCode == KeyEvent.KEYCODE_BACK) && !webview.canGoBack())
        {
            finish();// 退出此activity
            return true;
        }     
        return super.onKeyDown(keyCode, event);       
    }    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值