1.webview中显示网页使用mWebView.setWebViewClient(new WebViewClient(){…});
WebViewClient 的方法全解
doUpdateVisitedHistory(WebView view, String url, boolean isReload) //(更新历史记录)
onFormResubmission(WebView view, Message dontResend, Message resend) //(应用程序重新请求网页数据)
onLoadResource(WebView view, String url) // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
onPageStarted(WebView view, String url, Bitmap favicon) //这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。
onPageFinished(WebView view, String url) //在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。
onReceivedError(WebView view, int errorCode, String description, String failingUrl)// (报告错误信息)
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)//(获取返回信息授权请求)
onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) //重写此方法可以让webview处理https请求。
onScaleChanged(WebView view, float oldScale, float newScale) // (WebView发生改变时调用)
onUnhandledKeyEvent(WebView view, KeyEvent event) //(Key事件未被加载时调用)
shouldOverrideKeyEvent(WebView view, KeyEvent event)//重写此方法才能够处理在浏览器中的按键事件。
shouldOverrideUrlLoading(WebView view, String url)
//在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
2.web设置WebSettings webSettings = mWebView .getSettings();
常用设置
setJavaScriptEnabled(true); //支持js
setPluginsEnabled(true); //支持插件
setUseWideViewPort(false); //将图片调整到适合webview的大小
setSupportZoom(true); //支持缩放
setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
supportMultipleWindows(); //多窗口
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
setAllowFileAccess(true); //设置可以访问文件
setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
webview webSettings.setBuiltInZoomControls(true); //设置支持缩放
setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
setLoadWithOverviewMode(true); // 缩放至屏幕的大小
setLoadsImagesAutomatically(true); //支持自动加载图片
3.加载界面3个方法
LoadUrl 直接加载网页、图片并显示.(本地或是网络上的网页、图片、gif)
LoadData 显示文字与图片内容 (模拟器1.5、1.6)
LoadDataWithBase 显示文字与图片内容(支持多个模拟器版本)
4.返回建
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
5.调用js
webView.addJavascriptInterface(new WebAppInterface(), "Android");
class WebAppInterface
{
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c)
{
mContext = c;
}
/** Show a toast from the web page */
// 如果target 大于等于API 17,则需要加上如下注解
// @JavascriptInterface
public void showToast(String toast)
{
Toast.makeText(mContext, toast, Toast.LENGTH_LONG).show();
}
}
<script type="text/javascript">
var appraction = this;
function showAndroidToast(toast)
{
if(appraction.Android) {
appraction.Android.showToast(toast);
}
}
</script>
6.WebChromeClient
onProgressChanged(WebView view, int newProgress) //通知应用程序当前网页加载的进度
onReceivedTitle(WebView view, String title) //当document 的title变化时,会通知应用程序
onReceivedIcon(WebView view, Bitmap icon) //当前页面有个新的favicon时候,会回调这个函数。
onReceivedTouchIconUrl(WebView view, String url//通知应用程序 apple-touch-icon的 url
onShowCustomView(View view, CustomViewCallback callback) //通知应用程序webview需要显示一个custom view,主要是用在视频全屏HTML5Video support。
onHideCustomView() //退出视频通知
onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) //请求创建一个新的窗口,如果我们应用程序接管这个请求,必须返回true,并且创建一个新的webview来承载主窗口。如果应用程序不处理,则需要返回false,默认false。
onRequestFocus(WebView view) //webview请求得到focus,发生这个主要是当前webview不是前台状态,是后台webview
onCloseWindow(WebView window) //通知应用程序从关闭传递过来的webview并从view tree中remove。
onJsAlert(WebView view, String url, String message, JsResult result) //通知应用程序显示javascript alert对话框,如果应用程序返回true内核认为应用程序处理这个消息,返回false,内核自己处理。
onJsConfirm(WebView view, String url, String message, JsResult result) //通知应用程序提供confirm 对话框。
onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) //通知应用程序显示一个prompt对话框。
onJsBeforeUnload(WebView view, String url, String message, JsResult result) //通知应用程序显示一个对话框,让用户选择是否离开当前页面,这个回调是javascript中的onbeforeunload事件,如果客户端返回true,内核会认为客户端提供对话框。默认行为是return false。
onExceededDatabaseQuota(String url, String databaseIdentifier, long quota, long estimatedDatabaseSize, long totalQuota, WebStorage.QuotaUpdater quotaUpdater) //通知应用程序webview内核web sql 数据库超出配额,请求是否扩大数据库磁盘配额。默认行为是不会增加数据库配额。
onReachedMaxAppCacheSize(long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater) //通知应用程序内核已经到达最大的appcache。
onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) //当前页面请求是否允许进行定位。
onGeolocationPermissionsHidePrompt() //通知宿主应用程序,对于地理位置的权限要求
openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture) //这个回调是私有回调, 当页面需要请求打开系统的文件选择器,则会回调这个方法,比如我们需要上传图片,请求拍照,邮件的附件上传等等操作。(屏蔽input type="file")//4.1+
openFileChooser(ValueCallback<Uri> uploadFile)//3.0-
openFileChooser(ValueCallback<Uri> uploadFile, String acceptType)//3.0+
onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)//5.0+
接收上传的文件返回
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = null;
if (intent != null && resultCode == RESULT_OK){
result = intent.getData();
} else if (picFile != null) {
result = Uri.fromFile(picFile);
}
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
} else if (requestCode == FILECHOOSER_RESULTCODE2) {
if (null == mUploadMessage2)
return;
Uri result = null;
if (intent != null && resultCode == RESULT_OK){
result = intent.getData();
} else if (picFile != null) {
result = Uri.fromFile(picFile);
}
if (result != null) {
mUploadMessage2.onReceiveValue(new Uri[]{result});
} else {
mUploadMessage2.onReceiveValue(new Uri[]{});
}
mUploadMessage = null;
}
}