Android WebView详解

来源:互联网 发布:剑灵火影捏脸数据 编辑:程序博客网 时间:2024/05/23 18:04

一、简介:WebView是一个显示网页的视图,它允许使用浏览器加载网页或者就在WebView内加载网页,它使用WebKit渲染引擎来显示网页。
如果要将Web应用程序(或只是网页)作为客户端应用程序的一部分提供,可以使用WebView进行操作。WebView类是Android的View类的子类,它允许你将网页显示为Activity布局的一部分。它不包括完全开发的Web浏览器的任何功能,例如导航控件或地址栏。默认情况下,所有WebView都会显示一个网页。

二、添加一个WebView到你的应用程序中。
1、在布局文件中添加WebView,方式就是类似于TextView
2、在Java代码中通过findViewById获取到WebView实例
3、webView.loadUrl(“http://www.baidu.com“);
前提:添加上INTERNET权限

三、启用JavaScript

WebView myWebView = (WebView) findViewById(R.id.webview);WebSettings webSettings = myWebView.getSettings();webSettings.setJavaScriptEnabled(true);

有些网页如果不启用JavaScript是打开不了的,比如https://www.baidu.com
一般情况下建议启用JavaScript

四、将JavaScript代码绑定到Android代码
在开发专门针对Android应用程序中的WebView设计的Web应用程序时,你可以在JavaScript代码和客户端Android代码之间创建接口。例如,你的JavaScript代码可以调用Android代码中的方法来显示对话框,而不是使用JavaScript的alert()函数。
这里主要用到了addJavascriptInterface方法,详情可以参考
https://developer.android.com/guide/webapps/webview.html#AddingWebView 中的Binding JavaScript code to Android code章节,这里讲的比较详细。

五、处理页面导航
如果想让所有链接都在WebView中实现,可以这样写:

WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.setWebViewClient(new WebViewClient());

如果想做详细的控制,比如让外链通过浏览器访问,则这样写:

webView.setWebViewClient(new WebViewClient() {            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                if (Uri.parse(url).getHost().equals("https://www.baidu.com")) {                    return false;                }                /**                 * 外链调用浏览器  往往这样是出于安全考虑                 */                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));                startActivity(intent);                return true;            }        });

六、导航网页历史
当你的WebView覆盖URL加载时,它会自动累积访问的网页的历史记录。你可以通过goBack()和goForward()向后和向前浏览历史记录。
例如,对用户点击手机上的物理返回键的处理如下:

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {    // Check if the key event was the Back button and if there's history    if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {        myWebView.goBack();        return true;    }    // If it wasn't the Back key or there's no web page history, bubble up to the default    // system behavior (probably exit the activity)    return super.onKeyDown(keyCode, event);}

七、加载缓冲条

webView.setWebChromeClient(new WebChromeClient(){              @Override              public void onProgressChanged(WebView view, int newProgress) {                  super.onProgressChanged(view, newProgress);                  progress.setVisibility(View.VISIBLE);                  progress.setProgress(newProgress);              }          });
webView.setWebViewClient(new WebViewClient(){               @Override              public void onPageFinished(WebView view, String url) {                  super.onPageFinished(view, url);                  if (progress != null) {                      progress.setVisibility(View.GONE);                  }              }          });  

八、WebView的缓存
缓存模式:
LOAD_CACHE_ONLY:不使用网络,只读取本地缓存数据
LOAD_DEFAULT:根据cache-control决定是否从网络上取数据
LOAD_NO_CACHE:不使用缓存,只从网络获取数据
LOAD_CACHE_ELSE_NETWORK:只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据

1 0
原创粉丝点击