webview的整理小结

什么是webview

Webview是一个基于Android的webkit的内核浏览器的组件,对开发人员来说,和其他的组件没有什么区别,主要作用就是加载一些html网页的信息

Webview的好处

一:兼容已有的项目。在移动端展示已有的网页,通过webview,把已经建好的web页面直接在本地用浏览器打开

二:能够动态的更新,

         通过加载网页的形式展现到客户端,一旦发现有bug,服务端修改后客户端就可以立刻展现出来,不会发现任何bug信息,而如果使用其他组件展示,一旦发现bug,只能通过版本更新进行修复,这样体验效果很好不的

Webview的缺点

耗电量大,加载慢,加载时间长容易导致手机发热

Webview怎么用

创建一个webview对象,通过loadurl方法进行加载就可以了

注意:webview加载网络,是需要联网的,这是时候就需要一个联网的权限:

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

 

就像这样,这个时候你会发现,虽然加载成功了,可是却发现并不是自己的应用程序加载的这个网页,而是打开了系统的浏览器加载的网页,因为loadUrl()这个方法默认的是调用系统浏览器进行加载网页的。这就很不爽了,如果想让自己的应用程序加载这个网页,就需要调用setWebViewClient()这个方法,并重写里面的shouldOverrideUrlLoading()这个方法。

 

public booleanshouldOverrideUrlLoading(WebView view, String url) {

                                     view.loadUrl(url);

                                     returnsuper.shouldOverrideUrlLoading(view, url);

                            }

定义WebView的title和进度

设置webview的标题和进度条,主要是要调用setWebChromeClient() 方法,并重写里面的方法进行处理的。

例如:onReceivedTitle ()方法,进行处理显示的标题,直接设置进去就可以了,里面的tvTitle 就是我定义的一个TextView组件。

再如:我们经常会在加载网页的时候显示进度条,这个更容易做,只需要定义一个进度条,然后重写onProgressChanged()这个方法,就可以了,里面的参数newProgress 直接设置到你定义的progressBar中就可以了,而这个newProgress最大的值就是100,也就是加载完成的时候,这个时候你只需要把这个进度条隐藏就可以了。

@Override

        public voidonReceivedTitle(WebView view, String title) {

          tvTitle.setText(title);

          super.onReceivedTitle(view,title);

        }

        @Override

        public voidonProgressChanged(WebView view, int newProgress) {

          progressBar.setProgress(newProgress);

          if (newProgress ==100) {

             progressBar.setVisibility(View.GONE);

          }

          super.onProgressChanged(view,newProgress);

        }

 

setWebChromeClient()和setWebViewClient() 的区别

setWebChromeClient(): 辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等

例如

设置标题  onReceivedTitle(WebView view, String title)

加载进度:onProgressChanged(WebView view, int newProgress)

 

setWebViewClient (): 主要处理解析,渲染网页等浏览器做的事情,

例如:

使用自己应用程序加载网页:shouldOverrideUrlLoading(WebView view, String url)

网页加载前,onPageStarted(WebView view, String url, Bitmap favicon)

加载后处理,onPageFinished(WebView view, String url)

加载失败: onReceivedError(WebView view, int errorCode, String description, StringfailingUrl)  

 

这里注意:

一般情况下,都会把加载的本地错误页面放到asset目录下面,那么读取asset目录下面的文件路径就是:

file:///android_asset/文件名带后缀

 

对webview的一些常用设置

调用getSettings()方法,获得WebSettings 对象,从而对webview进行一些相关的设置,主要方法有

   

    private void setWebView(WebView mWebView) {

       WebSettings webSettings =mWebView.getSettings();

       webSettings.setJavaScriptEnabled(true);//是否支持JavaScript

       webSettings.setSupportZoom(true);//是否支持缩放

       webSettings.setBuiltInZoomControls(true);//设置是否显示缩放工具,

       webSettings.setUseWideViewPort(true);//设置此属性,可任意比例缩放。

       webSettings.setDefaultFontSize(18);//设置默认的字体大小

       webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //关闭webview中缓存

       webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过js打开新的窗口

       webSettings.setPluginsEnabled(true);//是否支持插件,如flashPlayer \ activityX

       webSettings.setBlockNetworkImage(false);//是否显示网络图像

       webSettings.setLoadWithOverviewMode(true);// 缩放至屏幕的大小

    }

Webview 下载网页中的文件

通过webview下载网页中的文件,主要是调用  setDownloadListener()方法,里面接受的参数就是一个DownloadListener  接口,继承这个内部类,从写里面的方法  onDownloadStart 就可以了,里面的参数

输出的结果可知:

第一个就是你要下载文件的url 

第二个参数:userAgent  : 应该是一些设备信息,设备的型号,系统版本之类的

中间两个我也不清楚

最后一个应该是这个文件的大小,

下载文件有两种方法:

一种是调用系统的下载方法,这个很简单,就几行代码的:

 

Uriuri=Uri.parse(url);

Intentintent=new Intent(Intent.ACTION_VIEW,uri);

startActivity(intent);

 

第二种是自己定义网络连接,读取流

 

        URL url = new URL(mUrl);

        HttpURLConnection conn = (HttpURLConnection)url.openConnection();

        conn.setDoInput(true);

//      conn.setDoOutput(true);

        InputStream in =conn.getInputStream();

 

 

 

具体代码我就不写了,但是在看视频的时候,出现了一个问题,就是按照视频上的代码写,会出现一个java.io.FileNotFoundException:

最后发现原因就是不能添加   conn.setDoOutput(true); 这行代码,至于为什么,不太清楚我是在这个帖子上看到的,http://macleo.iteye.com/blog/1754342

 

 

以上是根据慕课网上的视频  http://www.imooc.com/learn/268   和自己的以前的一些知识整理的。。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值