作用:显示html富文本的控件
--加载html :
loadData(String html,"text/html;charset=utf-8",null) 加载html网页内容
loadUrl(String url) 加载互联网的网页数据
loadUrl(String url,HashMap<String,String> headers) 加载网页,并带有请求头参数
loadUrl(String url) 加载互联网的网页数据
---基本设置
webView.getSettings().setJavaScriptEnabled(true);// 支持运行javascript
webView.setWebChromeClient(new WebChromeClient());// 支持运行特殊的javascript(例如:alert())
webView.setWebViewClient(new WebViewClient());// 当点击超链地址后不会新打开浏览器来访问,而是始终在本app中浏览页面
【注意:】
WebView除了可以加载服务器端的网页,还可以加载本地资产目录中的网页文件。网页文件格式为:”file:///android_asset/文件名称”。
WebSettings 作用: 通过上面的代码,可以实现WebView加载网页内容,但是对于HTML文本的Javascript代码却无法加载运行。为了解决这个问题要借助WebSettings类。WebSettings类除了可以设置是否支持Javascript外,还具有set系列方法来设置WebView的属性和状态。WebSettings对象通过WebView对象的getSettings()方法来获取。
怎么获得WebSettings:通过WebView对象的getSetting()方法
----WebSettings的基本用法:
setJavaScriptEnabled(boolean flag); //设置是否支持js
setBlockNetworkImage(boolean flag) //设置是否阻止网络图片加载
setDefaultFontSize(int size) //设置默认字体大小
setFixedFontFamily(String font) //设置固定使用的字体
setDefaultTextEncodingName(String encoding) //设置解码时默认的字符集
setAllowFileAccess(boolean allow) //设置是否允许访问WebView中文件。就是file:///android_asset和file:///android_res路径下的资产和资源文件。默认允许访问。
setLayoutAlgorithm(LayoutAlgorithm) //设置布局算法
setPluginsEnabled(true); //支持插件
setUseWideViewPort(false); //将图片调整到适合webview的大小
setSupportZoom(boolean support) //设置是否支持缩放
setBuiltInZoomControls(boolean enabled) //将HTML文本内容加载到WebView中
setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局
supportMultipleWindows(); //多窗口
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
setAllowFileAccess(true); //设置可以访问文件
setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
setLoadWithOverviewMode(true); // 缩放至屏幕的大小
setLoadsImagesAutomatically(true); //支持自动加载图片
——WebViewClient作用: WebView解决了支持Javascript的问题。但是新的问题又出来了。当点击WebView中的超链接后,原本希望目标网页在当前WebView中显示,但是却打开了系统浏览器来加载目标网页。为了解决这个问题,要借助WebViewClient类。WebViewClient类专门用来辅助WebView处理各种通知、请求等事件。通过WebView对象调用setWebViewClient()方法来指定一个WebViewClient对象,重写WebViewClient对象中的shouldOverrideUrlLoading()方法,使得当有新连接时,使用当前WebView来显示网页。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,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
-------android端与JavaScript的交互:
android调用JS方法
webView.loadUrl("javascript:方法名()");
JS调用android方法
1、android端创建一个类(例如MyJS),并且在该类中声明一个让js调用的方法(例如click)
2、在该方法上声明一个注解@JavascriptInterface
3、调用webview.addJavascriptInterface(new MyJS(this), "app");方法。
4、在JS端通过app.click();调用android端的方法
webview跟其他控件差不多,应用于控件时可以直接显示html
开发代码如下:
webView = (WebView) findViewById(R.id.webview);
// webView.loadData(htmlstr, "text/html;charset=utf-8", null);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);//让WebView支持javascript
settings.setDefaultTextEncodingName("utf-8");//设置字符集
// settings.setBlockNetworkImage(true);//设置不能访问网络图片
// settings.setSupportZoom(true);//开启网页的缩放
// settings.setBuiltInZoomControls(true);
// settings.setLoadWithOverviewMode(true);//设置网页缩放至屏幕大小
// settings.setUseWideViewPort(true);
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("print", "请求连接的URL:" + url);
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d("print", "开始加载连接:" + url);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d("print", "网页加载结束:" + url);
}
});//所有请求在本地的webview打开
webView.setWebChromeClient(new WebChromeClient());//支持特殊的JavaScript
// webView.loadUrl("http://www.17173.com");
webView.addJavascriptInterface(new MyJS(this), "android");
//加载本地网页
webView.loadUrl("file:///android_asset/login.html");