Android WebView

分享到:

Android WebView控件可以在APP内部打开一个指定的网络URL或者显示APP本地的一段HTML文本,应用场合非常多使用起来也很灵活。本文将通过实例向大家介绍WebView的使用方法。

实例1,通过WebView打开一个网络URL

布局XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          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" />

</RelativeLayout>

JAVA代码:

package com.my.androidtest;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class WebViewActivity extends Activity {

	WebView webView1=null;
	String url="http://www.baidu.com";//定义要访问的URL
  
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_web_view);
  
		webView1=(WebView)this.findViewById(R.id.webView1);
		WebSettings webSettings = webView1.getSettings(); 
		webSettings.setJavaScriptEnabled(true);//设置WebView支持Javascript
		webView1.loadUrl(url);
	}

}

注意:因为我们需要通过WebView控件访问网络URL所以要在项目的AndroidManifest.xml文件中添加网络访问权限:<uses-permission android:name="android.permission.INTERNET"/>否则将无法访问网络资源 ,这个配置节放在manifest节点内部,与uses-sdk和application节点同级即可。如下图所示:

运行后效果如下图:

简单说明一下这个WebView实例:通过WebView访问互联网最重要一点是不能忽略AndroidManifest.xml文件的权限设置,很多初学者往往会忽略这个问题。再一点是很多网页都包含有javascript,如果不设置webview支持javascript的话会出现有很多难以解决的问题。总结来说使用WebView调用一个网址大概需要以下几个步骤
1. 有一个WeBView控件,可以是XML布局也可以在源码中声明例如:WebView webView = new WebView(this);
2. 必须在AndroidManifest.xml中加入INTERNET访问权限:<uses-permission android:name="android.permission.INTERNET"/>
3. 指定一个目标URL,并对WebView进行设置,如本例中开启了对javascript的支持


实例2,通过WebView加载本地HTML

在这个例子中XML布局无变化直接沿用示例1的,java源码有少许修改,代码如下:

package com.my.androidtest;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class WebViewActivity extends Activity {

	WebView webView1=null;
	String html="<h1 style='color:red;font-weight:bolder'>这是一段本地HMTL代码</h1>";//定义一段本地HTML
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_web_view);
  
		webView1=(WebView)this.findViewById(R.id.webView1);
		WebSettings webSettings = webView1.getSettings(); 
		webSettings.setJavaScriptEnabled(true);//设置WebView支持Javascript

		//webView1.loadData(html, "text/html", "utf-8");//这个方法在有些手机上中文会乱码
		webView1.loadDataWithBaseURL(null, html, "text/html", "utf-8",null);
	}

}

一开始用loadData方法发现在很多手机上中文乱码,后来用loadDataWithBaseURL方法解决了乱码问题。运行效果如下图:


通过以上两个例子分别演示了如何使用WebView访问互联网资源,以及如何加载本地的html。其实WebView在实际应用过程中还有很细节需要注意,这里总结了一些经常用到的webview使用技巧。

1 如果希望点击webview中的链接继续在当前界面中响应,而不是重新打开Android的系统浏览器,必须覆写 webview的WebViewClient对象,代码示例如下:

 webView1.setWebViewClient(new WebViewClient(){    
                            public boolean shouldOverrideUrlLoading(WebView view, String url) {    
                                view.loadUrl(url);    
                                return true;    
                            }    
});

2 如果用webview点页面上的链接看了很多页以后,在默认情况下点击系统"Back"键,整个浏览器会调用finish()而结束自身,如果希望浏览的网页回退而不是退出webView所在的界面,需要在当前Activity中处理Back事件。覆写Activity类的onKeyDown(int keyCoder,KeyEvent event)方法,示例如下:

public boolean onKeyDown(int keyCoder,KeyEvent event){
                              if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){
                                      webview.goBack();   //goBack()表示返回webView的上一页面
                                      return true;
                              }
                              return false;
							}

3 设置WevView要显示的网页URL
互联网调用格式:webView.loadUrl("http://www.google.com");
本地文件调用格式:webView.loadUrl("file:///android_asset/本地文件.html"); 本地文件存放在项目根目录下的:assets文件夹中,如目录不存在新建既可。解释一下为什么调用本地文件要这么写:因为Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。

昵    称:
验证码:

相关文档:

Android控件
Android基础知识
Android组件
Android实例