Android中的WebView详细介绍_安卓软件开发教程-查字典教程网
Android中的WebView详细介绍
Android中的WebView详细介绍
发布时间:2016-12-28 来源:查字典编辑
摘要:Android中WebView的详细解释:1.概念:WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲...

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" />

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新安卓软件开发学习
    热门安卓软件开发学习
    编程开发子分类