Android中的WebView详细介绍
android中webview的详细解释:
1. 概念:
webview(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了webkit渲染引擎加载显示网页。
2. 使用方法:
(1).实例化webview组件:
a.在activity中实例化webview组件。eg:
webview webview = new webview(this);
b.调用webview的loadurl()方法,设置wevview要显示的网页.eg:
互联网用:webview.loadurl("http://www.google.com");
本地文件用:webview.loadurl("file:///android_asset/xx.html");
本地文件存放在:assets 文件中
c.调用activity的setcontentview( )方法来显示网页视图。
d.需要在androidmanifest.xml文件中添加权限,否则会出现web page not available错误。
<uses-permission android:name="android.permission.internet" />
(2).自定义webview组件继承webviewclient:
a.在布局文件中声明webview。eg:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<webview
android:id="@+id/webview1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</linearlayout>
b.在activity中实例化webview。
c.调用webview的loadurl()方法,设置webview要显示的网页.
d.调用setwebviewclient()方法设置webview视图。响应链接功能。
e.需要在androidmanifest.xml文件中添加权限,否则出现web page not available错误。
<uses-permission android:name="android.permission.internet"/>
3. 两种方法的区别:
(1).第一种方法:点击链接是新开android的系统browser中响应该链接。
(2).第二种方法:点击链接由自己处理,而不是新开android的系统browser中响应该链接。给webview添加一个事件监听对象(webviewclient)并重写其中的shouldoverrideurlloading方法:对网页中超链接按钮的响应。当按下某个连接时webviewclient会调用这个方法,并传递参数:按下的url。
4. 总结:
(1). 用webview点链接看了很多页以后为了让webview支持回退功能,需要覆盖覆盖activity类的onkeydown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面。
@override
public boolean onkeydown(int keycode, keyevent event) {
if ((keycode == keyevent.keycode_back) && mwebview.cangoback()) {
// goback()表示返回webview的上一页面
mwebview.goback();
return true;
}
return super.onkeydown(keycode, event);
}
(2). 设置webview基本信息:
a.如果访问的页面中有javascript,则webview必须设置支持javascript。
webview.getsettings().setjavascriptenabled(true);
b.触摸焦点起作用:
requestfocus();
c.取消滚动条:
this.setscrollbarstyle(scrollbars_outside_overlay);
5. 整体代码如下:
(1).mainactivity.java
package com.pansoft.webviewdemo;
import android.annotation.suppresslint;
import android.app.activity;
import android.os.bundle;
import android.view.keyevent;
import android.view.window;
import android.webkit.websettings;
import android.webkit.webview;
import com.pansoft.webviewdemo.webview.mywebview;
public class mainactivity extends activity {
private webview mwebview = null;
private websettings msettings = null;
/** tag */
private string tag = getclass().getsimplename();
/** url */
private string flg_url = "http://www.baidu.com/";
private mywebview mywebview;
@suppresslint("setjavascriptenabled")
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
requestwindowfeature(window.feature_no_title);
// 第二种方法
init01();
// 第一种方法
// init02();
}
/**
* 加载的是webview本身的
*/
private void init01() {
setcontentview(r.layout.activity_main);
mwebview =(webview)findviewbyid(r.id.webview1);
msettings = mwebview.getsettings();
// webview设置支持javascript
msettings.setjavascriptenabled(true);
// 加载url
mwebview.loadurl(flg_url);
mywebview = new mywebview(this, mwebview);
mwebview.setwebviewclient(mywebview);
}
/**
* 加载的是系统自带的浏览器
*/
private void init02() {
mwebview = new webview(this);
msettings = mwebview.getsettings();
msettings.setjavascriptenabled(true);
mwebview.loadurl(flg_url);
setcontentview(mwebview);
}
@override
public void onbackpressed() {
super.onbackpressed();
}
@override
public boolean onkeydown(int keycode, keyevent event) {
if ((keycode == keyevent.keycode_back) && mwebview.cangoback()) {
// goback()表示返回webview的上一页面
mwebview.goback();
return true;
}
return super.onkeydown(keycode, event);
}
}
(2).mywebview.java
package com.pansoft.webviewdemo.webview;
import android.content.context;
import android.graphics.bitmap;
import android.util.log;
import android.webkit.httpauthhandler;
import android.webkit.webview;
import android.webkit.webviewclient;
/**
* mywebview
*
* @author administrator
*
*/
public class mywebview extends webviewclient {
private context mcontext;
private webview mwebview;
private string tag = getclass().getsimplename();
/**
* 构造方法
*
* @param mcontext
* @param mwebview
*/
public mywebview(context mcontext, webview mwebview) {
super();
this.mcontext = mcontext;
this.mwebview = mwebview;
}
/**
* 打开链接前的事件,为了避免再次按的时候加载的是系统自带的浏览器,点击链接由自己处理
*/
// 这个函数我们可以做很多操作,比如我们读取到某些特殊的url,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
@override
public boolean shouldoverrideurlloading(webview view, string url) {
if (url != null) {
mwebview.loadurl(url);
log.d(tag, "--->shouldoverrideurlloading--->");
}
return true;
}
/**
* 接收到http请求的事件
*/
@override
public void onreceivedhttpauthrequest(webview view,
httpauthhandler handler, string host, string realm) {
super.onreceivedhttpauthrequest(view, handler, host, realm);
}
/**
* 载入页面开始的事件
*/
// 这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。
@override
public void onpagestarted(webview view, string url, bitmap favicon) {
super.onpagestarted(view, url, favicon);
log.d(tag, "--->onpagestarted--->");
}
/**
* 载入页面完成的事件
*/
// 同样道理,我们知道一个页面载入完成,于是我们可以关闭loading条,切换程序动作。
@override
public void onpagefinished(webview view, string url) {
super.onpagefinished(view, url);
log.d(tag, "--->onpagefinished--->");
}
/**
* 当浏览器访问制定的网址发生错误时会通知我们应用程序,比如网络错误。
*/
@override
public void onreceivederror(webview view, int errorcode,
string description, string failingurl) {
super.onreceivederror(view, errorcode, description, failingurl);
}
}
(3).activity_main.xml
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<webview
android:id="@+id/webview1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</linearlayout>
(4).权限:
<uses-permission android:name="android.permission.internet" />
上一篇: Android中子线程和UI线程通信详解
下一篇: iOS开发技巧之NullSafe原理分析
推荐阅读
-
iOS的UI开发中Modal的使用与主流应用UI结构介绍
-
西红柿和番茄一样的吗?给你详细的介绍和美食的做法
-
不同的湖北鱼价格详细介绍!喜欢吃鱼的人们必看
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
Mac中Eclipse连不上Android手机的解决方法
-
android中开启actionbar的两种方法
-
Android中的全局变量与局部变量使用小结
-
Unix/Linux系统下的nobody用户与nologin详细介绍
-
Android Studio 通过一个登录功能介绍SQLite数据库的使用
-
node.js中debug模块的简单介绍与使用