一、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代码:

 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.wv);
wv.setWebChromeClient(new WebChromeClient() { // 为WebView设置WebChromeClient
@Override
public void onProgressChanged(WebView view, int newProgress) {// 重写onProgressChanged方法
MainActivity.this.setProgress(newProgress * 100);
}
});
wv.setWebViewClient(new WebViewClient() { // 为WebView设置WebViewClient
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {// 重写onReceivedError方法
Toast.makeText(MainActivity.this, "Sorry!" + description,
Toast.LENGTH_SHORT).show();
}
});
Button btn = (Button) findViewById(R.id.btn); // 获取Button对象
btn.setOnClickListener(new View.OnClickListener() { // 为Button对象设置OnClickListener监听器
@Override
public void onClick(View v) { EditText et = (EditText) findViewById(R.id.et); // 获得WebView对象
String url = et.getText().toString().trim();
if (URLUtil.isNetworkUrl(url)) { // 判断是否是网址
wv.loadUrl(url);
} else {
Toast.makeText(MainActivity.this, "对不起,您输入的网址有错。",
Toast.LENGTH_SHORT).show();
et.requestFocus(); // 将焦点移到EditText
}
}
});
// 设置前进后退按钮
Button btnForward = (Button) findViewById(R.id.btnForward);
btnForward.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wv.canGoForward()) { // 判断是否能够前进
wv.goForward();
} else {
Toast.makeText(MainActivity.this, "对不起,您现在不能前进!",
Toast.LENGTH_SHORT).show();
}
}
});
Button btnBack = (Button) findViewById(R.id.btnBack);
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wv.canGoBack()) { // 判断是否能够前进
wv.goBack();
} else {
Toast.makeText(MainActivity.this, "对不起,您现在不能后退!",
Toast.LENGTH_SHORT).show();
}
}
});
}

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

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

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

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

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

重新输入网址浏览:

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

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

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

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

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. echarts-noDataLoadingOption问题

    目前echarts暂时不支持noDataLoadingOption外挂,所以我为此diy了一个无数据展示文字. 但是echarts很奇怪,它是判断serises==[]空数组才会自动出现echarts ...

  2. java.sql.DataTruncation: Data truncation

    问题一: 用jdbc插入数据时,当数据库表中某列设置的长度小于要插入的字符的实际长度时就会抛出此异常. 如:数据表中某列char [4],长度为4,插入:"Hello"时,字符&q ...

  3. 表格的一些原生js操作(隔行变色,高亮显示,添加删除,搜索)

    看着网上的视频教程,虽说还是有点简单,但还是不免想记录下.这些操作包括(隔行变色,高亮显示,添加删除,搜索功能),而这儿就是涉及table的原有属性“tBodies” “rows” “cells”等几 ...

  4. 自定义SharePoint列表新增、编辑、查看页面(NewForm、EditForm、DispForm)

    转:http://blog.csdn.net/lance_lot1/article/details/7966571 在项目中,用户需求涉及在一个列表录入项目信息,选择一个项目后,与该项目相关的信息实现 ...

  5. Gen_server行为分析与实践

    1.简介 Gen_server实现了通用服务器client_server原理,几个不同的客户端去分享服务端管理的资源(如图),gen_server提供标准的接口函数和包含追踪功能以及错误报告来实现通用 ...

  6. BlockingQueue汇总

    前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便 ...

  7. 【Tcpcopy】离线回放功能

    最近因调试问题,需要一直进行tcpcopy,拿有问题的包进行测试.决定使用tcpcopy对录制脚本进行回放,以下为我操作的具体步骤.主要是三块 1 下载安装具有离线回放功能的tcpcopy 2 使用t ...

  8. codeforces 629D 树状数组+LIS

    题意:n个圆柱形蛋糕,给你半径 r 和高度 h,一个蛋糕只能放在一个体积比它小而且序号小于它的蛋糕上面,问你这样形成的上升序列中,体积和最大是多少 分析:根据他们的体积进行离散化,然后建树状数组,按照 ...

  9. leetcode@ [49] Group Anagrams (Hashtable)

    https://leetcode.com/problems/anagrams/ Given an array of strings, group anagrams together. For exam ...

  10. fuse文件系统

    用户空间文件系统(Filesystem in Userspace,简称FUSE)是操作系统中的概念,指完全在用户态实现的文件系统.目前Linux通过内核模块对此进行支持.一些文件系统如ZFS,glus ...