Android WebView
Android WebView ( 网页浏览 ) 控件主要用于在 Android APP 中加载 HTML 网页
WebView
WebView 是 Android 内置的基于 Chromium
封装一个浏览器控件
WebView
提供了以下几个方法用于加载网页内容
-
loadUrl()
直接显示网页内容(单独显示网络图片),一般不会出现乱码
-
loadData(data, "text/html", "UTF-8")
用来加载 URI 格式的数据,不能通过网络来加载内容,不能加载图片,而且经常会遇到乱码的问题
-
loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null)
loadData() 的增强版,可以加载图片,baseUrl 为存储的图片路径
WebChromeClient
WebChromeClient 是 辅助 WebView 处理 Javascript 的对话框、网站图标、网站 title、加载进度等
WebChromeClient
提供了以下方法
方法 | 说明 |
---|---|
onJsAlert(WebView view,String url,String message,JsResult result) | 处理Js中的Alert对话框 |
onJsConfirm(WebView view,String url,String message,JsResult result) | 处理Js中的Confirm对话框 |
onJsPrompt(WebView view,String url,String message,String defaultValue,JsPromptResult result) | 处理Js中的Prompt对话框 |
onProgressChanged(WebView view,int newProgress) | 当加载进度条发生改变时调用 |
onReceivedIcon(WebView view, Bitmap icon) | 获得网页的icon |
onReceivedTitle(WebView view, String title) | 获得网页的标题 |
WebViewClient
WebViewClient
是辅助 WebView 处理各种通知与请求事件
WebViewClient
提供了以下几个方法
方法 | 说明 |
---|---|
onPageStared(WebView view,String url) | 通知主程序网页开始加载 |
onPageFinished(WebView view,String url,Bitmap favicon) | 通知主程序,网页加载完毕 |
doUpdateVisitedHistory(WebView view,String url,boolean isReload) | 更新历史记录 |
onLoadResource(WebView view,String url) | 通知主程序WebView即将加载指定url的资源 |
onScaleChanged(WebView view,float oldScale,float newScale) | ViewView的缩放发生改变时调用 |
shouldOverrideKeyEvent(WebView view,KeyEvent event) | 控制webView是否处理按键时间,如果返回true,则WebView不处理,返回false则处理 |
shouldOverrideUrlLoading(WebView view,String url) | 控制对新加载的Url的处理,返回true,说明主程序处理WebView不做处理,返回false意味着WebView会对其进行处理 |
onReceivedError(WebView view,int errorCode,String description,String failingUrl) | 遇到不可恢复的错误信息时调用 |
WebSettings
WebSettings 是 WebView 相关配置的设置,比如 setJavaScriptEnabled()
设置是否允许 JavaScript 脚本执行
WebSettings
提供了以下几个方法
方法 | 说明 |
---|---|
getSettings() | 返回一个WebSettings对象,用来控制WebView的属性设置 |
loadUrl(String url) | 加载指定的Url |
loadData(String data,String mimeType,String encoding) | 加载指定的Data到WebView中.使用"data:"作为标记头,该方法不能加载网络数据.其中mimeType为数据类型如:textml,image/jpeg. encoding为字符的编码方式 |
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) | 比上面的loadData更加强大 |
setWebViewClient(WebViewClient client) | 为WebView指定一个WebViewClient对象.WebViewClient可以辅助WebView处理各种通知,请求等事件。 |
setWebChromeClient(WebChromeClient client) | 为WebView指定一个WebChromeClient对象,WebChromeClient专门用来辅助WebView处理js的对话框,网站title,网站图标,加载进度条等 |
最简单的 WebView 范例
-
创建一个 空的 Android 项目
cn.twle.android.WebViewSimple
-
修改
AndroidManifest.xml
添加网络权限<uses-permission android:name="android.permission.INTERNET" />
-
修改
MainActivity.java
package cn.twle.android.webviewsimple; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends AppCompatActivity { private WebView ms_webview = new WebView(); private static final String SITE_URL = "https://www.twle.cn/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(ms_webview); WebSettings webSettings = ms_webview.getSettings(); webSettings.setJavaScriptEnabled(true); ms_webview.setWebViewClient(new WebViewClient() { //设置在 WebView 点击打开的新网页在当前界面显示,而不跳转到新的浏览器中 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); ms_webview.loadUrl(SITE_URL); } }