WebView使用,简易浏览器

本文介绍如何使用 WebView 实现简易浏览器的功能,包括加载网页、后退按钮监听及历史记录处理。

今天突然来的兴趣,想看看WebView,学习就像滚雪球,滚着滚着滚大了。本来就是加个链接,现在变成了一个简易的浏览器。

源代码:http://download.youkuaiyun.com/detail/hello_12413/8741775

编码方式:UTF-8

如图:



主页面代码如下:

package cn.com.avatar.browser;

import cn.com.avatar.browser.utils.WebViewTools;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
	private EditText address;
	private ProgressBar pb;
	private WebView webView;
	private WebViewTools tools;
	private Button button;
	private final String url = "http://www.baidu.com";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		address = (EditText) findViewById(R.id.addres);
		pb = (ProgressBar) findViewById(R.id.pb);
		webView = (WebView) findViewById(R.id.wb);
		button = (Button) findViewById(R.id.go);
		button.setOnClickListener(this);
		tools = new WebViewTools(this, webView, pb);
		tools.setView(address);
		
		webView.loadUrl(url);
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		if (tools != null)
			tools.canelWebView();
	}

	private long exitTime = 0;

	@Override
	public void onBackPressed() {
		//返回键监听,有历史记录则返回,没有退出
		if (tools != null && tools.isCanBack()) {
			tools.goBack();
		} else {
			long times = System.currentTimeMillis();
			if ((times - exitTime) > 2000) {
				Toast.makeText(getApplicationContext(), getString(R.string.exit), Toast.LENGTH_SHORT).show();
				exitTime = System.currentTimeMillis();
			} else {
				super.onBackPressed();
				finish();
				System.exit(0);
			}
		}

	}

	@Override
	public void onClick(View v) {
		if (address != null) {
			if (!TextUtils.isEmpty(address.getText().toString().trim())) {
				String uri = address.getText().toString().trim();
				webView.loadUrl(uri);
			} else {
				Toast.makeText(this, getString(R.string.tip_null), Toast.LENGTH_SHORT).show();
			}
		}
	}

}

主功能代码如下:


package cn.com.avatar.browser.utils;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.JsPromptResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.TextView;
/**
 * @project WebViewDemo
 * @ClassName RegularUtil.java
 * @Description WebView工具类
 * @author xugang
 * @date 2015-5-20 下午2:32:51     
 */
@SuppressLint("SetJavaScriptEnabled")
public class WebViewTools {
	private WebView mWebView;
	private ProgressBar mBar;
	private Context mContext;
	private View view;

	public WebViewTools(Context mContext, WebView mWebView, ProgressBar mBar) {
		super();
		this.mWebView = mWebView;
		this.mBar = mBar;
		this.mContext = mContext;
		initmWebView();
	}

	private void initmWebView() {
		mWebView.getSettings().setUseWideViewPort(true);
		mWebView.getSettings().setLoadWithOverviewMode(true);
		mWebView.getSettings().setJavaScriptEnabled(true);
		mWebView.getSettings().setSupportZoom(true);
		mWebView.getSettings().setBuiltInZoomControls(true);
		mWebView.getSettings().setAppCacheEnabled(true);
		mWebView.requestFocus();

		mWebView.setWebChromeClient(wcc);
		mWebView.setDownloadListener(dl);
		mWebView.setWebViewClient(wvc);
	}
	
	public WebView getWebView(){
		return mWebView;
	}

	public void setView(View view) {
		this.view = view;
	}

	public boolean isCanBack() {
		if (mWebView != null) {
			return mWebView.canGoBack();
		}
		return false;
	}

	public void goBack() {
		if (mWebView != null) {
			mWebView.goBack();
		}
	}

	private WebViewClient wvc = new WebViewClient() {
		@Override
		public boolean shouldOverrideUrlLoading(WebView wb, String urlPath) {
//			if (view != null) {
//				if (view instanceof TextView) {
//					((TextView) view).setText(urlPath);
//				}
//			}
			return super.shouldOverrideUrlLoading(wb, urlPath);
		}

		public void onPageStarted(WebView wb, String url, android.graphics.Bitmap favicon) {
			if (view != null) {
				if (view instanceof TextView) {
					((TextView) view).setText(url);
				}
			}
		};

		@SuppressWarnings("deprecation")
		public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
			mWebView.clearView();
			// webView.setVisibility(View.GONE);

		};

		public void onReceivedSslError(WebView view, android.webkit.SslErrorHandler handler, android.net.http.SslError error) {
			// handler.cancel(); // Android默认的处理方式
			handler.proceed(); // 接受所有网站的证书
			// handleMessage(Message msg); // 进行其他处理
		};

		public void onPageFinished(WebView view, String url) {

		};
	};
	private WebChromeClient wcc = new WebChromeClient() {
		public void onProgressChanged(WebView view, int newProgress) {
			System.out.println("-------------"+newProgress);
			if (newProgress < 100) {
				mBar.setVisibility(View.VISIBLE);
				mBar.setProgress(newProgress);
			} else {
				mBar.setVisibility(View.GONE);
			}
		};

		public boolean onJsAlert(WebView view, String url, String message, android.webkit.JsResult result) {
			new AlertDialog.Builder(mContext).setMessage(message).create().show();
			result.confirm();
			return true;
		};

		public boolean onJsPrompt(WebView view, String url, final String message, String defaultValue, JsPromptResult result) {
			// webView.stopLoading();
			// webView.reload();
			// result.confirm(); //如果自己处理js 则最后必须result.confirm
			return false;
		};
	};
	private DownloadListener dl = new DownloadListener() {
		@Override
		public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
			// 调用系统 下载
			mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
		}
	};

	public void canelWebView() {
		mWebView.clearCache(true);
		mWebView.destroy();
	}
}


其实WebView使用起来很简单,设置些属性,就能和浏览器一样。

代码没有怎么优化,欢迎吐槽。


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值