一、WebView控件两个方法:setWebChromeClient和setWebClient
setWebChromeClient主要处理解析,渲染网页等浏览器做的事情。其中WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等。
常用的方法有:
onCloseWindow(关闭WebView)
onCreateWindow()
onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle
示例:添加进度条,使得界面更友好(代码如下)
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
setTitle("本页面已加载" + newProgress + "%");
if (newProgress == 100) {
closeProgressBar();
} else {
openProgressBar(newProgress);
}
super.onProgressChanged(view, newProgress);
}
});
}
// 打开进度条
protected void openProgressBar(int x) {
// TODO Auto-generated method stub
setProgressBarIndeterminateVisibility(true);
setProgress(x);
}
// 关闭进度条
protected void closeProgressBar() {
// TODO Auto-generated method stub
setProgressBarIndeterminateVisibility(false);
}
WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来
说包括:
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest
示例:(匿名内部类实现)
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
// webView加载web资源
view.loadUrl(url);
return true;
}
});
二、启用支持javascript + web加载页面优先使用缓存加
WebSettings settings = webView.getSettings(); settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK)
三、 改写物理按键 返回键的逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) {
// 返回上一页面
webView.goBack();
return true;
} else {
// 退出程序
finish();
}
}
return super.onKeyDown(keyCode, event);
}