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

原创粉丝点击