2019独角兽企业重金招聘Python工程师标准>>>

WebView是android.webkit包下的一个组件,能用来显示网页。

WebView默认是不带地址栏和加进度条的,单单是一个显示网页内容的面板。

使用WebView非常简单,主要是通过load方法进行加载。

一、[使用WebView打开一个网页]
1.在布局xml文件中定义WebView组件
< WebView  android:id = "@+id/webview"
     android:layout_width = "match_parent"
     android:layout_height = "match_parent"
/>

2.在AndroidManifest.xml中添加网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>

3.通过load函数加载网页

mWebview = (WebView) this .findViewById(R.id. webview );

// 简单地加载一个页面
mWebview .loadUrl(url);
// 加载assets目录下的页面(assetsindex.html)
mWebview .loadData( "file:///android_asset/index.html" );

但你会发现,如果点击页面的某条链接进行跳转的话,会启动系统的默认浏览器进行加载,调出了我们本身的应用。要解决这个问题我们需要借助于WebViewClient。

二、自定义跳转链接:(重写WebViewClient中的shouldOverrideUrlLoading()方法)

mWebview .setWebChromeClient( new WebViewClient() { @Override   public  boolean  shouldOverrideUrlLoading(WebView view, String url){// 使用当前的WebView加载页面view.loadUrl(url);return  true ;}
});

在WebViewClient中还有很多的方法,例如:
public  void  onPageStarted(WebView view, String url, Bitmap favicon);

public  void  onPageFinished(WebView view, String url);

public  void  onLoadResource(WebView view, String url)

public  void  onReceivedError(WebView view,  int  errorCode, String description, String failingUrl)

我们都可以通过重写来实现自己的个性化操作。

三、页面回退
实现了跳转后,你忽然想返回到前一个浏览过的页面是,发现返回键是直接退出应用了。要实现类似系统浏览器那样的,返回键先是返回到上一个页面,直到最初始的页面才退出的话,可以这么做:

// 重写onKeyDown
public  boolean  onKeyDown ( int  keyCode, KeyEvent event) {if  ((keyCode == KeyEvent. KEYCODE_BACK ) &&  mWebview .canGoBack()) {mWebview .goBack();return  true ;}        return  super .onKeyDown(keyCode, event);
}

四、增加进度条
要是再加上加载进度条那就完美了,我们可以借助WebChromeClient来实现:

mWebview .setWebChromeClient( new WebChromeClient()  {public  void  onProgressChanged (WebView view,  int  newProgress){loadingProgress .setProgress(newProgress);}
});

五、WebView弹出框的处理

WebView默认情况下是无法弹出弹出框的,为了当我们点击事件是弹出框可以弹出,就需要对WebView进行一些处理,我们需要借助WebChromeClient来实现WebView与js的交互

mWebView.setWebChromeClient(new WebChromeClient(){@Overridepublic boolean onJsAlert(WebView view, String url, String message,final JsResult result) {// TODO Auto-generated method stubAlertDialog.Builder builder = new AlertDialog.Builder(context).setTitle("title").setMessage(message).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubresult.confirm();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}});builder.create();builder.show();return super.onJsAlert(view, url, message, result);}@Overridepublic boolean onJsConfirm(WebView view, String url,String message, JsResult result) {// TODO Auto-generated method stubreturn super.onJsConfirm(view, url, message, result);}@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) {// TODO Auto-generated method stubreturn super.onJsPrompt(view, url, message, defaultValue, resul;}});

一般情况下,只需要重写其中的一种方法,重写方法之后,如果弹出框只弹出一次,那么要在return之前加上result.cancel();即:

mWebView.setWebChromeClient(new WebChromeClient(){@Overridepublic boolean onJsAlert(WebView view, String url, String message,final JsResult result) {// TODO Auto-generated method stubAlertDialog.Builder builder = new AlertDialog.Builder(context).setTitle("title").setMessage(message).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubresult.confirm();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}});builder.create();builder.show();result.cancel();return true;}@Overridepublic boolean onJsConfirm(WebView view, String url,String message, JsResult result) {// TODO Auto-generated method stubreturn super.onJsConfirm(view, url, message, result);}@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) {// TODO Auto-generated method stubreturn super.onJsPrompt(view, url, message, defaultValue, resul;}});

转载于:https://my.oschina.net/u/1257891/blog/173623

android学习之WebView相关推荐

  1. Android学习-使用WebView在app上显示网页

    通过Intent调用系统浏览器 Uri uri = Uri.parse(url);//url为你要链接的地址 Intent intent = new Intent(Intent.ACTION_VIEW ...

  2. android有关的笔记,android学习笔记1——webview相关

    上了快两个星期班了,也没有什么具体的任务安排给我,只是有些小的需求让我改动一下,总体来说,现在我比较闲.又想到自己android的基础其实很薄弱,所以决定重新开始,深入的学习android. 从web ...

  3. Android 8.0学习 (36)---Android 8.0 WebView 拍照、简易预览、二维码扫描 各种问题解决

    Android 8.0 WebView 拍照.简易预览.二维码扫描 各种问题解决 项目用到了WebView包装HTML5做成app使用,其中有页面用到了二维码和拍照上传功能.本人从未做过android ...

  4. 《Android学习指南》目录

    转自:http://android.yaohuiji.com/about Android学习指南的内容分类: 分类 描述 0.学习Android必备的Java基础知识 没有Java基础的朋友,请不要先 ...

  5. Android 学习指南(2017版)

    Android 学习指南 不断有新人来询问如何学习Android,很多都是无从下手,没有任何概念.正好好久没写文章了,今天来整理一下Android学习大纲,同时也会附上部分学习资料,主要还是希望大家能 ...

  6. Android之深入WebView

    WebView 目录 思维导图 WebView 的基本使用 WebView WebSettings WebViewClient WebChromeClient WebView 与 JS 交互 Andr ...

  7. Android学习系列(27)--App缓存管理

    随笔- 53 文章- 10 评论- 1064 Android学习系列(27)--App缓存管理 无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的压力,而且因为更快速的用户体验而方便了用户. ...

  8. Android:Android学习路线图

    https://blog.csdn.net/libing1991_/article/details/53455243 前言 工作快一年,Android完全靠自学,看着那些基础教程一步步去做,写过简单的 ...

  9. 道阻且长 行则将至——android学习总结

    道阻且长 行则将至--android学习总结 我是14年毕业的,我在想我是从什么时候开始做的android开发呢?是大二下学期的时候,那个时候跟在学长的屁股后面蹭一个软件设计大赛的比赛.那时,我们选的 ...

最新文章

  1. [NHibernate]代码生成器的使用
  2. Trends Genet | 王关红和Jackson Champer综述共生菌和基因驱动技术防控蚊媒疾病
  3. 《自然》杂志:超导突触处理信息能力超人脑
  4. 数据库复习1——数据库体系结构和关系系统
  5. 2.3.1 进程的同步与互斥
  6. 2021暑假实习-SSM超市积分管理系统-day05笔记
  7. 去中心化交易聚合平台ParaSwap将平台交易gas费成本降低约 20%
  8. 中国节能电梯市场趋势报告、技术动态创新及市场预测
  9. linux slf4j找不到,slf4j+log4j2在tomcat8 下无日志输出
  10. 64-bit and iOS 8 Requirements for New Apps
  11. java基础练习题(含答案)
  12. python输入矩阵_python如何输入矩阵
  13. #IP实验室,第二周复盘
  14. 现在哪个 UI 会写代码?
  15. shopxp商城系统对接个人支付宝免签h5支付
  16. ASAM:自动驾驶仿真测试标准引领者
  17. win10护眼模式_Win10系统中你不知道的小秘密,今天解开了,学会了提高工作效率...
  18. drop box java_使用Dropbox Java API将文件上载到Dropbox
  19. AAAI2021论文列表
  20. Q for Mortals2笔记 -- 字典

热门文章

  1. 多迪新手学UI设计,拿高薪必须掌握的几个小技巧?
  2. Listview 多个ViewHolder实现
  3. 改写了一个shell写的cdn节点测试代码
  4. js 中读取JSON的方
  5. 《应试捷径-典型考题解析与考点贯通_系统分析师考试》复习重点提示
  6. [译] 如何写一篇杀手级的软件工程师简历
  7. 【Python】keras使用LSTM拟合曲线
  8. 重大通知:社交系统ThinkSNS+ 发布公告!
  9. 谈谈对Spring IOC的理解
  10. android ListView包含Checkbox滑动时状态改变