Android WebView学习,创建步骤并附代码(Handler、线程、WebView结合)

WebView允许您为一个Web页面创建一个您自己的窗口。今天,我将创建一个简单的能够包含一个Web页面的Activity。

1. 新建一个项目:HelloWebView.

2. 打开res/layout/main.xml。编辑:

  <?xml version="1.0" encoding="utf-8"?>

<WebView xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:id="@+id/webView"

    >

</WebView>


3. 打开HelloWebView.java,并添加内容,如下:

4. 由于要访问网络,所以需要在AndroidMainfest.xml添加权限:

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

5. 在AndroidMainfest.xml中设置一下为没有标题的界面:
<activity android:name=".HelloWebViewActivity" android:label="@string/app_name"
     android:theme="@android:style/Theme.NoTitleBar">


6. 这样就能运行了,只不过是一个简单的Web界面。还需要设置些其他的东西,如重写一个WebViewClient类,这样这个Activity就能处理自己的URL request了。

7. 在HelloWebViewActivity类中添加下面的内部类

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

8. 然后在onCreate(Bundle)方法中添加下面代码:
mWebView.setWebViewClient(new HelloWebViewClient());

9. 重写BACK按键。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);


10.下面运行程序就行了。

运行结果如图所示:

下面是我参考网上写的代码:

package com.covics.zfh;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class HelloWebViewActivity extends Activity {
	
	public static final int PROGRESS = 0;
	public static final int WEBVIEW = 1;
	private WebView mWebView;
	private Handler mHandler;
	private ProgressDialog mProgressDialog;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
        loadView(mWebView, "http://write.blog.csdn.net/postlist");
        
        /* 定义一个Handler用于处理下载线程与UI间通讯 */
        mHandler = new Handler(){
			@Override
			public void handleMessage(Message msg) {
				
				if (!Thread.currentThread().isInterrupted()){
					switch (msg.what) {
					case PROGRESS :
						/* 显示进度条*/
						mProgressDialog.show();
						break;
					case WEBVIEW :
						/* 隐藏进度条.注意不用dismiss(),cancel()方法,否则再次调用show()时,进度中的小圆圈将不会转动 */
						mProgressDialog.hide();
						break;
					default :
						break;
					}
				}
				super.handleMessage(msg);
			}
        };
    }
    /**
     * @description 初始化WebView控件,并初始化ProgressDialog进度条
     * 
     * @throws NullPointerException
     * 
     */
    private void init(){
    	mWebView = (WebView)findViewById(R.id.webView);
    	mWebView.getSettings().setJavaScriptEnabled(true);
    	/* 设置滚动风格,为0指不给滚动留空间 */
    	mWebView.setScrollBarStyle(0); 
    	mWebView.setWebViewClient(new WebViewClient(){

			@Override
			public boolean shouldOverrideUrlLoading(WebView view, String url) {
				loadView(view, url); /* 调用loadView()方法 */
				return true;
			}
    	});
    	
    	mWebView.setWebChromeClient(new WebChromeClient(){

			@Override
			public void onProgressChanged(WebView view, int newProgress) {
				if (100 == newProgress){ /* 进度到100时转到WebView页面*/
					mHandler.sendEmptyMessage(WEBVIEW);
				}
				super.onProgressChanged(view, newProgress);
			}
    	});
    	/* 新建一进度条 */
    	mProgressDialog = new ProgressDialog(HelloWebViewActivity.this);
    	/* 设置进度条样式  STYLE_SPINNER是圆形的, STYLE_HORIZONTAL是条开的  */
    	mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    	mProgressDialog.setMessage("loading...");
    }
    
    /* 退出软件 */
    private void cofirmExit(){
    	AlertDialog.Builder builder = new AlertDialog.Builder(HelloWebViewActivity.this);
    	builder.setTitle("退出软件")
    		.setMessage("是否退出软件?")
    		.setPositiveButton("是", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					/* 取消进度条,否则关闭软件时会报错 */
			    	mProgressDialog.cancel(); 
			    	/* 调用finish()方法,退出程序 */
					HelloWebViewActivity.this.finish();  
				}
    		})
    		.setNegativeButton("否", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					/* 若选择否则不需要填写代码 */
				}
			}).show(); /* 记得调用show()方法,否则显示不出来Dialog */
    }
    
    /**
     * 
     *	@exception 显示webview页面.
     *	
     *	@author admin
     *	@param WebView, String
     *	@throws Exception
     *
     */
    private void loadView(final WebView webView, final String url){
    	new Thread(){
			@Override
			public void run() {
				/* 发送一个空消息,用于通知显示Progress. */
				mHandler.sendEmptyMessage(PROGRESS);
				/* webView加载页面 */
				webView.loadUrl(url);
				super.run();
			}
    		
    	}.start();
    }
    
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
			/* 用户按返回键,如果可返回则回退 */
			System.out.println("test onKeyDown-->1");
			mWebView.goBack();
			return true;
		} else if (keyCode == KeyEvent.KEYCODE_BACK){
			/* 用户按返回键,若不可返回时则退出程序 */
			System.out.println("test onKeyDown-->2");
			cofirmExit();
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
    
}


结果如下图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值