Android开发中WebView的简单使用小结

前言

WebView(网络视图)在Andorid中就是用来显示网页的,下面我们来一起看看它是如何使用的。

一、基本使用

1.声明权限,WebView不可避免地要用到网络,我们要加上网络访问权限。

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

2.放入Layout

<WebView android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:id="@+id/web">

3.在Activity中引用

private WebView webView;
webView = (WebView) findViewById(R.id.web);
webView.loadUrl("http://piaoshu.org");
//webView.loadUrl("file:///android_asset/xx.html");也可以加载本地的html

这时你会发现,应用会自动跳出系统或第三方浏览器,也就是说你无法在自己的应用中显示自己的网页。怎么办呢?接下来介绍WebView两个重要的监听事件。

二、WebViewClient与WebChromeClient

webView.setWebViewClient()主要用于加载网页过程的监听。

webView.setWebViewClient(new WebViewClient(){
 @Override
 //只要重写此方法,就能在本应用中加载网页
 public boolean shouldOverrideUrlLoading(WebView view, String url) {
  view.loadUrl(url);
  return true;//返回值时true的时候控制网页在WebView中去打开,如果为false调用系统浏览器或第三方浏览器
 }
 @Override
 public void onReceivedError(WebView view, int errorCode,
  String description, String failingUrl) {
//收到错误信息的时候,系统执行此操作.
//比如当出现404错误码时,我们可以自己写个html放在asset文件夹中,把webView隐藏掉而显示本地的网页。
  } 

  @Override
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
   super.onPagStarted(view, url, favicon);
   //若想在网页开始加载时执行一些操作,重写该方法
  } 

  @Override
  public void onPageFinished(WebView view, String url) {
   super.onPageFinished(view, url);
   //若想在网页结束时执行一些操作,重写该方法
  }
}
);

webView.setWebChromeClient()主要用于加载网页过程对UI的操作。

webView.setWebChromeClient(new WebChromeClient(){
 @Override
 public void onProgressChanged(WebView view, int newProgress) {
  progressBar.setProgress(newProgress);
//newProgress的值为1到100的整数,我们可以利用这个参数使用ProgressBar或ProgressDialog显示加载进度
  }
 }
 @Override
 public void onReceivedTitle(WebView view, String title) {
  textView.setText(title);//参数title为网页的标题,可以用一个textView来显示。
 }
}
);

好了,我们来看看网页加载的情况。

看起来网页加载得很好,其实我已经设置了一些相关属性。我们来看看WebView 有哪些属性

三、WebSettings

WebSettings settings=webView.getSettings();
//支持JavaScript脚本
settings.setJavaScriptEnabled(true);
//设置WebView支持广泛的视窗
settings.setUseWideViewPort(true);
//支持手势缩放
settings.setBuiltInZoomControls(true);
//设置WebView 支持加载更多格式页面
settings.setLoadWithOverviewMode(true);
//WebView加载页面优先使用缓存加载
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

还有一些属性我就不讲出来了,有兴趣的自己搜一下。

四、下载文件

webview中有时含有下载文件的链接,点击链接后文件会被下载到本地中。如何实现呢?系统为我们提供了一个下载接口DownloadListener,代码简单而方便。

我们只要写一个类实现此接口并重写方法,通过Intent调用系统的浏览器

class MyListenter implements DownloadListener{
 @Override
 public void onDownloadStart(String url, String userAgent,        String contentDisposition, String mimetype, long contentLength) {
  Uri uri = Uri.parse(url); //url即下载链接
  Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  startActivity(intent);
 }
}

别忘了设置监听器

webView.setDownloadListener(new MyListenter());

我们借助了第三方浏览器进行下载,这是最简单的做法

点击Android下载,效果如下

或者我们可以写一个线程进行下载,在onDownloadStart()方法中启动线程就可以了,具体代码就不贴上来了。

总结一下用法。

使用前记得申明权限,控件的引用就不用说了。

重点在于WebViewClient与WebChromeClient两个类。

webView.setWebViewClient()主要用于加载网页过程的相关操作。

webView.setWebChromeClient()则用于加载网页过程对UI的操作。

系统还我们提供了一个下载接口DownloadListener。

以上就是这篇文章的全部内容,希望对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • Android webview和js互相调用实现方法

    Android-webview和js互相调用 Android 和 H5 都是移动开发应用的非常广泛.市面上很多App都是使用Android开发的,但使用Android来开发一些比较复杂附属类,提示性的页面是得不偿失的.而H5具有开发速度快,更新不用依赖于App的更新,只需要服务端更新相应的页面即可,所以,App和H5页面相结合就显得尤为重要.而android和H5都不可能每次都是独立存在的,而是相互影响也相互的调用,获取信息等,例如,H5页面要获取App中的用户的基本信息,或者App端要操作H5

  • Android中实现Webview顶部带进度条的方法

    写这篇文章,做份备忘,简单滴展示一个带进度条的Webview示例,进度条位于Webview上面. 示例图如下: 主Activity代码: 复制代码 代码如下: package com.droidyue.demo.webviewprogressbar; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.vi

  • Android编程实现WebView自适应全屏方法小结

    本文实例讲述了Android编程实现WebView自适应全屏的方法.分享给大家供大家参考,具体如下: 第一种: settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); 第二种: WebSetting settings = webView.getSettings(); settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 把所有内容放在we

  • Android中WebView图片实现自适应的方法

    本文实例讲述了Android中WebView图片实现自适应的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: WebSettings ws = tv.getSettings(); 加上这个属性后,html的图片就会以单列显示就不会变形占了别的位置 ws.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //让缩放显示的最小值为起始 webView.setInitialScale(5); // 设置支持缩放 webSettin

  • android中webview控件和javascript交互实例

    当我们要实现丰富的图文混排效果的时候,我们一般会使用webview,这是一个功能十分强大的的控件,来看看官方的解释: 复制代码 代码如下: A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply display some online content within your Activity. It uses the WebKit

  • Android编程实现使用webView打开本地html文件的方法

    本文实例讲述了Android编程实现使用webView打开本地html文件的方法.分享给大家供大家参考,具体如下: 在布局的配置文件里: <WebView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/webView"> </WebView> 后台java代码; @SuppressLint(

  • Android WebView 的简单使用

    Android WebView 1.首先修改activity.xml中的代码: 2.然后MainActivity中的代码: 3.最后设置权限: <uses-permission android:name="android.permission.INTERNET"/> 4.运行效果如下:(这样就不需调用系统默认浏览器) 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 解析Android中webview和js之间的交互

    1.android中利用webview调用网页上的js代码.Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示:mWebView.getSettings().setJavaScriptEnabled(true);mWebView.loadUrl("javascript:test()"); 2. 网页上调用android中java代码的方法在网页中

  • Android WebView那些坑之上传文件示例

    最近公司项目需要在WebView上调用手机系统相册来上传图片,开发过程中发现在很多机器上无法正常唤起系统相册来选择图片. 解决问题之前我们先来说说WebView上传文件的逻辑:当我们在Web页面上点击选择文件的控件(<input type="file">)时,会回调WebChromeClient下的openFileChooser()(5.0及以上系统回调onShowFileChooser()).这个时候我们在openFileChooser方法中通过Intent打开系统相册或

  • Android webview与js交换JSON对象数据示例

    最近几个项目的测试结果,Android无法主动通过调用 webview.loadUrl("javascript:"+callbackFunction+"('"+data+"')"); 这种方式将jsonobject类型的data传给js,因为js那边得到就是一个string的对象. 与此同时,js主动调用android的对象方式,android也无法返回给js一个jsonobject,需要js做一下转换,例如: Android 代码: 复制代码

  • Android编程实现WebView添加进度条的方法

    本文实例讲述了Android编程实现WebView添加进度条的方法.分享给大家供大家参考,具体如下: 标准的XML界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"

随机推荐