今天突然来的兴趣,想看看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使用起来很简单,设置些属性,就能和浏览器一样。
代码没有怎么优化,欢迎吐槽。
本文介绍如何使用 WebView 实现简易浏览器的功能,包括加载网页、后退按钮监听及历史记录处理。
169

被折叠的 条评论
为什么被折叠?



