【Android开发】网路编程及Internet应用-使用WebView显示网页

Android提供了内置的浏览器,该浏览器使用了开源的WebKit引擎。WebKit不仅能够搜索网址、查看电子邮件,而且能够播放视频节目。在Android中,要使用内置的浏览器,需要通过WebView组件来实现。通过WebView组件可以轻松实现显示网页功能。

如何在Android中使用WebView组件:

WebView组件使用方法同其它组件一样,既可以使用XML布局文件配置,也可以在java文件中通过new关键字创建。推荐使用XML布局文件配置,配置方法:

<WebView
    android:id="@+id/webView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Web组件的常用方法:
loadURL(String url) 用于加载指定URL对应的网页

loadData(String data,String mimeType,String encoding) 用于将指定的字符串数据加载到浏览器中

loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String HistoryUrl) 用于基于URL加载指定的数据

capturePicture() 用于创建当前屏幕的快照

goBack()执行后退操作,相当于浏览器上后退按钮的功能

goForward()执行前进操作,相当于浏览器上前进按钮的功能

stopLoading()用于停止加载当前页面

reload()用于刷新当前页面

下面利用几个实例说明WebView的应用

(1)例子1:使用WebView组件浏览指定网页
res/layout/main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <WebView
	    android:id="@+id/webView1"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"/>	

</LinearLayout>

MainActivity:

package com.example.test;  

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

public class MainActivity extends Activity{  

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView web=(WebView)findViewById(R.id.webView1);
        web.loadUrl("http://www.baidu.com");
 	//处理各种通知请求和事件,如果不使用该句代码,将使用内置浏览器访问网页
        web.setWebViewClient(new WebViewClient());
    }
}  

别忘记在AndroidManifest.xml中加入访问网络的权限:

<!-- 添加链接网络的权限 -->
<uses-permission android:name="android.permission.INTERNET"/>

运行结果如图

(2)例子2:使用WebView加载HTML代码
在进行Android开发时,对于一些游戏的帮助信息,使用HTML代码进行显示比较实用,不仅可以让界面更加美观,而且可以让开发更加简单、快捷。

需要使用loadDataWithBaseURL()方法加载HTML代码,基本语法格式如下:
loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String HistoryUrl) 

其中各项参数说明如下:
baseUrl:用于指定当前页面使用的基本URL。如果为null,则使用默认的about:blank,即空白页
data:用于指定要显示的字符串数据
mimeType:用于指定要显示的MIME类型。如果为null,则默认使用text/html
encoding:用于指定数据的编码方式
history:用于指定当前的历史URL,也就是进入该页前显示页的URL。如果为null,则使用默认的about:blank。

下面用一个实例来说明如何使用WebView组件加载HTML代码:
res/layout/main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <WebView
	    android:id="@+id/webView1"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"/>	

</LinearLayout>

MainActivity:

package com.example.test;  

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

public class MainActivity extends Activity{  

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView web=(WebView)findViewById(R.id.webView1);
        //处理各种通知请求和事件,如果不使用该句代码,将使用内置浏览器访问网页
        web.setWebViewClient(new WebViewClient());

        StringBuilder sb=new StringBuilder();
        sb.append("<div style=\"color:#CCCCCC\">工具栏菜单说明</div>");
        sb.append("<ul>");
        sb.append("<li>这是说明的第一行</li>");
        sb.append("<li>这是说明的第二行</li>");
        sb.append("<li>这是说明的第二行</li>");
        sb.append("</ul>");
        web.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8", null);//加载数据
    }
}

别忘记在AndroidManifest.xml中加入访问网络的权限:

<!-- 添加链接网络的权限 -->
<uses-permission android:name="android.permission.INTERNET"/>

运行结果如图

(3)例子3:让WebView支持JavaScript
在默认的情况下,WebView是不支持JavaScript的,但是有些网页有需要实现JavaScript功能。这个时候要为WebView加入兼容JavaScript的功能。利用以下两个步骤:

a.使用WebView组件的WebSettings对象提供的setJavaScriptEnabled()方法让JavaScript可用。
webview.getSettings().setJavaScriptEnabled(true);//设置WebView组件兼容JavaScript

b.通过上面的设置,大部分JavaScript可用,但是对于通过window.alert()方法弹出的对话框不可用。要想显示弹出的对话框,需要使用WebView组件的setWebChromeClient()方法来处理JavaScript的对话框,具体代码如下:
webview.setWebChromeClient(new WebChromeClient());

下面通过一个具体的实例来说明如何让WebView组件支持JavaScript
res/layout/main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

	<CheckBox
	    android:id="@+id/checkBox1"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:text="允许执行JavaScript代码"/>

    <WebView
	    android:id="@+id/webView1"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"/>	

</LinearLayout>

MainActivity:

package com.example.test;  

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class MainActivity extends Activity{
	private WebView webview;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webview=(WebView)findViewById(R.id.webView1);
        //处理各种通知请求和事件,如果不使用该句代码,将使用内置浏览器访问网页
        webview.setWebViewClient(new WebViewClient());

        CheckBox checkBox=(CheckBox)findViewById(R.id.checkBox1);
        checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				if(isChecked){
					webview.getSettings().setJavaScriptEnabled(true);//设置JavaScript可用
					webview.setWebChromeClient(new WebChromeClient());
					//指定要加载的网页(含有JavaScript的网页,读者可自行寻找此类网址)
					webview.loadUrl("http://acm.hpu.edu.cn/PowerWeb/login.jsp");
				}else{
					//指定要加载的网页(含有JavaScript的网页,读者可自行寻找此类网址)
					webview.loadUrl("http://acm.hpu.edu.cn/PowerWeb/login.jsp");
				}

			}
		});
      //指定要加载的网页(含有JavaScript的网页,读者可自行寻找此类网址)
        webview.loadUrl("http://acm.hpu.edu.cn/PowerWeb/login.jsp");
    }
}
  

别忘记在AndroidManifest.xml中加入访问网络的权限:

<!-- 添加链接网络的权限 -->
<uses-permission android:name="android.permission.INTERNET"/>

运行结果为图

(4)整合项目:利用WebView打造功能实用的浏览器
实现一个包含前进、后退功能并支持JavaScript的网页浏览器

布局XML文件中包含前进和后退按钮,一个URL地址输入框,一个"GO"按钮,还有下方的WebView组件
res/layout/main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ll1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent"
	    android:layout_weight="4"
	    android:orientation="horizontal" >
	    <Button
	        android:id="@+id/back"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="后退"/>
	    <Button
	        android:id="@+id/front"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="前进"/>
	    <EditText  android:id="@+id/urlText"
	        android:layout_width="150pt"
	        android:layout_height="wrap_content"/>
	    <Button
	        android:id="@+id/go"
	        android:layout_width="wrap_content"
	        android:layout_height="wrap_content"
	        android:text="GO"/>
    </LinearLayout>	

    <LinearLayout
	    android:layout_width="fill_parent"
	    android:layout_height="fill_parent"
	    android:layout_weight="1"
	    android:orientation="horizontal" >

	<WebView android:id="@+id/webview1"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"/>

	</LinearLayout>
</LinearLayout>

界面效果如图

要在AndroidManifest.xml中设置强制横屏(android:screenOrientation="landscape"):

<activity
    android:name=".MainActivity"
    android:screenOrientation="landscape"
    android:label="@string/app_name" >
         <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
</activity>

MainActivity:

package com.example.test;  

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity{
	private WebView webview;
	private EditText urlText;
	private Button goButton;
	private Button forward;//前进按钮
	private Button back;//后退按钮
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webview=(WebView)findViewById(R.id.webview1);
        //处理各种通知请求和事件,如果不使用该句代码,将使用内置浏览器访问网页
        webview.setWebViewClient(new WebViewClient());
        webview.getSettings().setJavaScriptEnabled(true);//设置兼容JavaScript
        webview.setWebChromeClient(new WebChromeClient());//处理JavaScript对话框

        urlText=(EditText)findViewById(R.id.urlText);
        forward=(Button)findViewById(R.id.front);
        forward.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				webview.goForward();

			}
		});

        back=(Button)findViewById(R.id.back);
        back.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				webview.goBack();

			}
		});

        goButton=(Button)findViewById(R.id.go);
        goButton.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				if(!"".equals(urlText.getText().toString())){
					openBrowser();//浏览网页
				}else{
					showDialog();//弹出提示对话框
				}

			}
		});
    }

	protected void showDialog() {
		new AlertDialog.Builder(MainActivity.this)
		.setTitle("网页浏览器")
		.setMessage("请输入要访问的网址")
		.setPositiveButton("确定",new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface arg0, int which) {
				Log.d("WebView","单击确认按钮");

			}
		}).show();
	}

	protected void openBrowser() {
		webview.loadUrl(urlText.getText().toString());//浏览网页
		Toast.makeText(MainActivity.this, "正在加载:"+urlText.getText().toString(), Toast.LENGTH_SHORT).show();

	}
}

别忘记在AndroidManifest.xml中加入访问网络的权限:

<!-- 添加链接网络的权限 -->
<uses-permission android:name="android.permission.INTERNET"/>

运行效果如图

怎么样?你掌握WebView的使用技术了吗?赶快动手来做吧!

转载请注明出处:http://blog.csdn.net/acmman/article/details/46489353

时间: 2015-06-14

【Android开发】网路编程及Internet应用-使用WebView显示网页的相关文章

android开发当中,如何获得当前地理位置并显示到第二个页面当中

问题描述 android开发当中,如何获得当前地理位置并显示到第二个页面当中 android开发当中,如何获得当前地理位置并显示到第二个页面当中 第一个页面放个提交按钮,点击提交后跳到第二个也能并精准显示出当前地理位置 解决方案 第一个页面 获取当前地理经纬度 使用 sharedpreferences 存储地理坐标 跳到第二页 在从sharedpreferences获取 坐标显示 解决方案二: 可以用Intent传值,或者EventBus

android开发-andriod 怎么可以像这个应用一样显示手机内的所有应用程序和一些系统选项

问题描述 andriod 怎么可以像这个应用一样显示手机内的所有应用程序和一些系统选项 如下图所示,我想显示这种效果该怎么做?开发-andriod 怎么可以像这个应用一样显示手机内的所有应用程序和一些系统选项-android 系统应用开发"> 解决方案 http://blog.csdn.net/linxcool/article/details/7692374 解决方案二: http://www.2cto.com/kf/201504/387107.html

android开发-为什么安卓的graphical什么都没有显示,也不能拉控件进去

问题描述 为什么安卓的graphical什么都没有显示,也不能拉控件进去 开发-为什么安卓的graphical什么都没有显示,也不能拉控件进去-wii进去hbc什么都没有"> 解决方案 可能少安了一个插件 我也遇到过这个问题 记不太清了 可能是ADT或者是SDK 和AVD反正都能用到都安上吧 解决方案二: ADT,SDK,都有,那应该是差了AVD吧,我弄一个看看,谢谢. 解决方案三: 呃..貌似它是让你更新一下ADT,估计是ADT里面缺失一些东西吧

【Android开发】网路编程及Internet应用-从指定网站上下载文件

利用前面学过的HttpUrlConnection和文件输入输出流来完成从Android端下载指定站点的文件. 写一个编辑框,用来输入要下载文件的URL路径,下面一个按钮,点击实现文件下载 res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/and

android开发教程之textview内容超出屏幕宽度显示省略号_Android

实现如下: 复制代码 代码如下: <TextView android:layout_width="fill_parent"                    android:layout_height="wrap_content"                   android:id="@+id/hello"                    android:ellipsize="end"          

android开发教程之textview内容超出屏幕宽度显示省略号

实现如下:复制代码 代码如下:<TextView android:layout_width="fill_parent"                    android:layout_height="wrap_content"                   android:id="@+id/hello"                    android:ellipsize="end"            

Android开发中使用WebView后程序进入后台依旧占用CPU的解决

开发的程序在论坛反馈板块下,用户抱怨使用以后,手机发热量增加,耗电量也随之增加,在新版本发布之前,被要求排查程序源码中可能的原因. 根据每个页面访问的情况,初步确定问题出现的两个地方分别是有admob的列表页.使用webview显示网页的页面:初步分析带有admob的列表页可能的原因是进入后台以后,虽然onPause()处理了事件,但是admob还是依旧运行中,所以出现了转入后台依旧高CPU消耗的问题.这里尝试了解决方案是在onPause()中销毁了admob的广告,当onResume()时重新

【Android开发】网络编程及Internet应用-获取天气预报

在Eclipse中创建Android项目,利用之前学过的WebView控件和中国天气网提供的天气数据接口,实现获取指定城市的天气预报. 布局文件: res/layout/main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too

Android开发中的多线程编程技术

Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的"麻烦"源于它很抽象.与单线程程序运行模式不同,但只要掌握了它们的区别,编写多线程程序就会很容易了.下面让我们集中精力开始学习吧! 多线程案例--计时器 我在给我的学生讲多线程的时候都会举一个计时器的案例,因为计时器案例是多线程的经典应用. 这个案例中,屏幕启动之后,进入如图8-1所示的界面.