WebView的简单使用
来源:互联网 发布:php新闻发布系统 编辑:程序博客网 时间:2024/05/18 01:33
WebView的简单使用
现如今嵌入webview的App有很多了,比如淘宝,京东等App。
WebView继承自view,就是用来展示网页的。
显示外部网页
首先要给网络权限,然后通过loadurl直接加载网址即可。
/*加载外部网页*/ webView.loadUrl("http://baidu.com"); webView.setWebViewClient(new WebViewClient());//直接在webview中加载,不调用外部浏览器
加载本地网页
首先在main下面创建assets文件夹,然后将html文件放入其中。
直接通过loadUrl加载即可,注意路径要正确!
/*加载本地网页*/ webView.loadUrl("file:///android_asset/index.html");
返回键的处理
如果我们处理返回键的话,当我们点击返回键的时候回直接退出程序,而不是返回到上一页,如果想要返回上一页,那么我们就需要对返回键进行处理。
/*处理WebView返回事件*/ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == event.KEYCODE_BACK) { if (webView.canGoBack()) { webView.goBack(); return true; } } return super.onKeyDown(keyCode, event); }
WebSettings的使用
我们来看看源码的介绍:
WebSettings用来管理WebView的状态,当一个WebView首次被创建时已经包含一组默认的设置集合。我们可以通过getter方法去获取这个集合,通过WebView中的getSettings方法可以获得一个WebSettings对象,如果WebView被销毁,在WebSettings中所有回调方法将抛出IllegalStateException异常。
常用方法:
setSupportZoom(boolean support) 设置WebView是否支持使用屏幕控件或手势进行缩放,默认是true,支持缩放。setJavaScriptEnabled(boolean flag) 设置WebView是否允许执行JavaScript脚本,默认false,不允许setJavaScriptCanOpenWindowsAutomatically(boolean flag) 设置脚本是否允许自动打开弹窗,默认false,不允许
WebSettings还有很多其他的方法,具体可以参考websettings详解
WebViewClient
先看看源码的描述:
给主机应用程序一个在当前WebView中加载新url时接管控件的机会。如果WebViewClient没有提供,默认WebView将要求活动管理器为url选择适当的处理程序。如果提供WebViewClient,返回true意味着主机应用程序处理url,而返回false表示当前WebView处理url。使用POST“方法”不调用此方法。
也就实说WebViewClient是帮助WebView处理各种通知和请求事件的,如果我们没有给WebView设置WebViewClient的话,那么加载url时会调用系统的浏览器。
常用方法:
webView.setWebViewClient(new WebViewClient(){ /*历史记录被更新时调用*/ @Override public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { super.doUpdateVisitedHistory(view, url, isReload); } /*应用程序重新请求网页数据时调用*/ @Override public void onFormResubmission(WebView view, Message dontResend, Message resend) { super.onFormResubmission(view, dontResend, resend); } /*加载页面资源时调用 每个资源被加载时都会调用*/ @Override public void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); } /*页面开始加载时调用 */ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } /*页面加载完毕时调用 */ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return super.shouldOverrideUrlLoading(view, request); } /*加载错误时调用*/ @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); } /*获取网页授权信息时调用*/ @Override public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) { super.onReceivedClientCertRequest(view, request); } /*需要处理https请求时重写此方法*/ @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { super.onReceivedSslError(view, handler, error); } /*webView发生变化时调用*/ @Override public void onScaleChanged(WebView view, float oldScale, float newScale) { super.onScaleChanged(view, oldScale, newScale); } /*网页中的事件未被加载时调用*/ @Override public void onUnhandledKeyEvent(WebView view, KeyEvent event) { super.onUnhandledKeyEvent(view, event); } /*重写此方法可以处理网页中的事件*/ @Override public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) { return super.shouldOverrideKeyEvent(view, event); } /*点击网页中的链接时调用*/ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } });
WebChromeClient
WebChromeClient 帮助WebView处理JavaScript的对话框、网站图标、网站title、加载进度等。
常用方法:
webView.setWebChromeClient(new WebChromeClient() { /*获取vedio标签的预览图*/ @Override public Bitmap getDefaultVideoPoster() { return super.getDefaultVideoPoster(); } /*获取在vedio缓冲时的视图*/ @Override public View getVideoLoadingProgressView() { return super.getVideoLoadingProgressView(); } /*获取浏览历史记录*/ @Override public void getVisitedHistory(ValueCallback<String[]> callback) { super.getVisitedHistory(callback); } /*创建一个新的窗口时调用*/ @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg); } /*关闭webview时调用*/ @Override public void onCloseWindow(WebView window) { super.onCloseWindow(window); } /*进入全屏时调用*/ @Override public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); } /*退出全屏模式时调用*/ @Override public void onHideCustomView() { super.onHideCustomView(); } /*允许显示js对话框 默认不允许*/ @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } @Override public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) { return super.onJsBeforeUnload(view, url, message, result); } /*允许显示js确认对话框*/ @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { return super.onJsConfirm(view, url, message, result); } /*允许显示js提示对话框*/ @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { return super.onJsPrompt(view, url, message, defaultValue, result); } /*网页的加载进度*/ @Override public void onProgressChanged(WebView view, int newProgress) { L.i("加载进度"+newProgress+"%"); } /*网页title变化时调用*/ @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); L.i("标题发生变化了"+title); toolbar.setTitle(title); } });
webview demo
- 简单webview的使用
- 简单WebView的使用
- WebView的简单使用
- WebView简单的使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- webview的简单使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- WebView的简单使用
- 好久不做cf感到难受
- struts2的个别bug问题
- ACM学期总结
- Android开发基础之ListView
- python2.x和python3.x区别
- WebView的简单使用
- LintCode 两数之和
- 类对象切割对虚函数调用的影响
- 最小生成树-Prim算法和Kruskal算法
- jquery实现多级联动
- 一道sql面试题吧
- 生产者消费者模型
- 读者-写者问题(Reader-Writer Problem)
- 树莓派 Raspberry Pi 启用 root 登陆账户