一、WebView

1、简述

WebView(网络视图)内置WebKit引擎,能加载显示网页,还支持JS,并且能够在Android平台使用AJAX
WebView可以在布局中声明,也可以在Activity中直接实例化

2、主要步骤

使用WebView 的主要步骤:
1.在布局文件中声明WebView,通过findViewById或在Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/Todos.html"); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />

3、实例演示

Activity代码:

  1. @Override
  2. public void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. getWindow().requestFeature(Window.FEATURE_PROGRESS);
  5. setContentView(R.layout.activity_main);
  6. wv = (WebView) findViewById(R.id.wv);
  7. wv.setWebChromeClient(new WebChromeClient() { // 为WebView设置WebChromeClient
  8. @Override
  9. public void onProgressChanged(WebView view, int newProgress) {// 重写onProgressChanged方法
  10. MainActivity.this.setProgress(newProgress * 100);
  11. }
  12. });
  13. wv.setWebViewClient(new WebViewClient() { // 为WebView设置WebViewClient
  14. public void onReceivedError(WebView view, int errorCode,
  15. String description, String failingUrl) {// 重写onReceivedError方法
  16. Toast.makeText(MainActivity.this, "Sorry!" + description,
  17. Toast.LENGTH_SHORT).show();
  18. }
  19. });
  20. Button btn = (Button) findViewById(R.id.btn); // 获取Button对象
  21. btn.setOnClickListener(new View.OnClickListener() { // 为Button对象设置OnClickListener监听器
  22. @Override
  23. public void onClick(View v) {
  24.  
  25. EditText et = (EditText) findViewById(R.id.et); // 获得WebView对象
  26. String url = et.getText().toString().trim();
  27. if (URLUtil.isNetworkUrl(url)) { // 判断是否是网址
  28. wv.loadUrl(url);
  29. } else {
  30. Toast.makeText(MainActivity.this, "对不起,您输入的网址有错。",
  31. Toast.LENGTH_SHORT).show();
  32. et.requestFocus(); // 将焦点移到EditText
  33. }
  34. }
  35. });
  36. // 设置前进后退按钮
  37. Button btnForward = (Button) findViewById(R.id.btnForward);
  38. btnForward.setOnClickListener(new View.OnClickListener() {
  39. @Override
  40. public void onClick(View v) {
  41. if (wv.canGoForward()) { // 判断是否能够前进
  42. wv.goForward();
  43. } else {
  44. Toast.makeText(MainActivity.this, "对不起,您现在不能前进!",
  45. Toast.LENGTH_SHORT).show();
  46. }
  47. }
  48. });
  49. Button btnBack = (Button) findViewById(R.id.btnBack);
  50. btnBack.setOnClickListener(new View.OnClickListener() {
  51. @Override
  52. public void onClick(View v) {
  53. if (wv.canGoBack()) { // 判断是否能够前进
  54. wv.goBack();
  55. } else {
  56. Toast.makeText(MainActivity.this, "对不起,您现在不能后退!",
  57. Toast.LENGTH_SHORT).show();
  58. }
  59. }
  60. });
  61. }

第一次输入网址运行报错:

原因是没有在AndroidManifest配置权限,加入权限:

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

再次输入博客园首页网址点击'浏览':

竟然出现一张美女图片,无意中发现个彩蛋,网址输成http://www.cnblog.com/  ,漏了个s

重新输入网址浏览:

上面有个进度条显示网页加载进度,多输入几个网址测试'前进','后退'的功能。

再输入本地文件测试,显示以前写的待办事项网页

注意:在输入本地文件网址时,代码要把判断是否是网址URLUtil.isNetworkUrl(url)去掉,因为不会识别file:///为网址

  1. //if (URLUtil.isNetworkUrl(url)) { // 判断是否是网址
  2. wv.loadUrl(url);
  3. //} else {
  4. // Toast.makeText(MainActivity.this, "对不起,您输入的网址有错。",
  5. // Toast.LENGTH_SHORT).show();
  6. // et.requestFocus(); // 将焦点移到EditText
  7. //}

android学习日记15--WebView(网络视图)的更多相关文章

  1. android学习日记05--Activity间的跳转Intent实现

    Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...

  2. android学习日记03--常用控件Dialog

    常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...

  3. android学习日记03--常用控件checkbox/radiobutton

    常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...

  4. android学习日记03--常用控件button/imagebutton

    常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...

  5. android学习日记06--View视图

    一.android 界面开发 1.三个重要的类:View视图.Canvas画布.Paint画笔2.android 界面开发常用三种视图 View            --只能在主线程中更新,没有缓存 ...

  6. Android学习系列(15)--App列表之游标ListView(索引ListView)

    游标ListView,提供索引标签,使用户能够快速定位列表项.      也可以叫索引ListView,有的人称也为Tweaked ListView,可能更形象些吧.      一看图啥都懂了: 1. ...

  7. android学习日记18--Adapter简介

    一.Adapter 1.简述 最近学的GridView和Gallery 都有用到Adapter适配器,发现它貌似蛮重要的.专门上网搜了下有关Adapter的资料.android绝大多数应用是JAVA语 ...

  8. android学习日记16--GridView(网格视图)

    一.GridView 1.简述 GridView按照行列来显示图片或文本的一种视图,排列其实有点类似TableLayout布局, 不过和TableLayout还是差别很大的,倒比较像二维的ListVi ...

  9. android学习日记06--SurfaceView视图

    一.API关SurfaceView的介绍 SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface.你可以控制这个Surface的格式和尺寸.Surfacev ...

随机推荐

  1. poj3067

    求交点的个数: 容易发现,对于两条航线(xi,yi)和(xj,yj),设xi<xj 只有yi>yj时两条航线存在交点: 于是我们考虑以x为第一关键字减序,y为第二关键字为减序排序: 则对于 ...

  2. poj2001 Shortest Prefixes (trie)

    读入建立一棵字母树,并且每到一个节点就增加这个节点的覆盖数. 然后再重新扫一遍,一旦碰到某个覆盖数为1就是这个单词的最短前缀了. 不知为何下面的程序一直有bug……不知是读入的问题? type nod ...

  3. LeetCode Maximum Depth of Binary Tree (求树的深度)

    题意:给一棵二叉树,求其深度. 思路:递归比较简洁,先求左子树深度,再求右子树深度,比较其结果,返回:max_one+1. /** * Definition for a binary tree nod ...

  4. UVALive 3713 Astronauts (2-SAT,变形)

    题意: 有A,B,C三种任务,每个人必获得1个任务,大于等于平均年龄的可以选择A和C,小于平均年龄的可以选择B和C.这些人有一些是互相讨厌的,必须不能执行同任务,问能否安排他们工作?若行,输出任意一组 ...

  5. ↗☻【HTML5秘籍 #BOOK#】第8章 使用CSS3

    开发商前缀-moz- Firefox-webkit- Chrome和Safari-ms- Internet Explorer-o- Opera 伪类创造的交互性虽好,但已经有点过时了.主要问题是—太突 ...

  6. ramdisk作为根文件系统的配置

    ramdisk作为根文件系统的配置 http://wenku.baidu.com/link?url=oKj45hKtIANfoVzmoFAmWEvESHiqgWysxPASelpzaXk35gWb1I ...

  7. 25、BroadCastRecevier

    BroadCastRecevier 有两种注册方式 1. 清单文件里注册: 一旦应用程序被部署到手机, 广播接受者就会生效 2. 代码里面注册: 一旦代码所在的进程被杀死了, 广播接受者就失效了. 广 ...

  8. [selenium webdriver Java]检查元素状态

    许多测试失败是因为点击一个元素失败或者在一个不可见的字段中输入文字,或者是在不可输入的文本中输入文字. 我们可以在具体操作之前,检查一下元素的状态.WebElement类提供了这样的方法. 方法 目的 ...

  9. iPhone更新失败后如何恢复数据

    iPhone5最好不要用wifi下更新ios8.1,因为该固件比较大,很容易中途出问题失败,如果失败也不要怕,想要恢复数据还是有希望的. 如果不幸进入恢复模式,还没有实现备份,千万别点恢复,那就啥都没 ...

  10. 【转载】IP首部、TCP首部、UDP首部

    [转载自]http://blog.csdn.net/hjffly/article/details/7959889 IP首部 版本:L3协议版本号,IPv4或IPv6 首部长度:单位为4字节 协议:L4 ...