安卓 WebView
WebView是一个基于webkit引擎、展现web页面的控件。
代码部分
实例:
mWebView = (WebView)findViewById(R.id.wv_test_view); // 在当前activity打开而不是在浏览器打开 mWebView.setWebViewClient(new WebViewClient());
// Enable Javascript WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true);
String url = "http://www.utovr.com/"; mWebView.loadUrl(url); |
WebChromeClient
// 调用浏览器 mWebView = (WebView) findViewById(R.id.wv_chrome);
mWebView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); } });
// Enable Javascript WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true);
String url = "https://www.sogou.com/"; mWebView.loadUrl(url); |
WebView主要API:
// WebView相关类 WebSettings、WebViewClient、WebChromeClient // 前进/后退 // 是否可以后退 mWebView.canGoBack(); // 后退网页 mWebView.goBack(); // 是否可以前进 mWebView.canGoForward(); // 前进网页 mWebView.goForward(); // 以当前的index为起始点前进或者后退到历史记录中指定的steps // 如果steps为负数则为后退,正数则为前进 mWebView.goBackOrForward(steps); // 设置滚动条 // 设置滚动条 mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); // 清除缓存数据 // 清除网页访问留下的缓存 // 由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序 mWebView.clearCache(true); // 清除当前webview访问的历史记录 // 只会webview访问历史记录里的所有记录除了当前访问记录 mWebView.clearHistory(); // 这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据 mWebView.clearFormData(); // 三种加载方式 // 1.加载远程资源 mWebView.loadUrl("https://www.baidu.com/"); // 2.加载本地资源,工程放在assets目录 mWebView.loadUrl("file:///android_asset/WebClientTest/www/index.html"); // 3.加载手机本地的html页面 mWebView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html"); |
WebSettings
// Enable Javascript WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true);
//设置自适应屏幕,两者合用 webSettings.setUseWideViewPort(true); // 将图片调整到适合webview的大小 webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//缩放操作 webSettings.setSupportZoom(true); // 支持缩放,默认为true。是下面那个的前提。 webSettings.setBuiltInZoomControls(true); // 设置内置的缩放控件。若为false,则该WebView不可缩放 webSettings.setDisplayZoomControls(false); // 隐藏原生的缩放控件 //其他细节操作 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 关闭webview中缓存 webSettings.setAllowFileAccess(true); //设置可以访问文件 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 支持通过JS打开新窗口 webSettings.setLoadsImagesAutomatically(true); // 支持自动加载图片 webSettings.setDefaultTextEncodingName("utf-8");// 设置编码格式 // 设置缓存 webSettings.setAppCacheEnabled(); webSettings.setAppCachePath(); webSettings.setAppCacheMaxSize(); webSettings.setCacheMode(); |
WebViewClient
/** * 页面载入时调用 */ @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 void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); }
/** */ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); }
@Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return super.shouldOverrideUrlLoading(view, request); }
/** * 可以在此重载资源文件 */ @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { return super.shouldInterceptRequest(view, url); }
@Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { return super.shouldInterceptRequest(view, request); }
/** * 页面加载错误事调用 */ @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); } |
WebViewFullActivity
/** * WebView全特性测试 * http://blog.csdn.net/carson_ho/article/details/52693322 */ public class WebViewFullActivity extends AppCompatActivity { private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web_view_full); mWebView = (WebView) findViewById(R.id.wv_test); mWebView.setWebViewClient(new WebViewClient()); // 设置滚动条 mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY); // Enable Javascript WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); // 设置自适应屏幕,两者合用 webSettings.setUseWideViewPort(true); // 将图片调整到适合webview的大小 webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小 // 缩放操作 webSettings.setSupportZoom(true); // 支持缩放,默认为true。是下面那个的前提。 webSettings.setBuiltInZoomControls(true); // 设置内置的缩放控件。若为false,则该WebView不可缩放 webSettings.setDisplayZoomControls(false); // 隐藏原生的缩放控件 // 其他细节操作 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 关闭webview中缓存 webSettings.setAllowFileAccess(true); //设置可以访问文件 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 支持通过JS打开新窗口 webSettings.setLoadsImagesAutomatically(true); // 支持自动加载图片 webSettings.setDefaultTextEncodingName("utf-8");// 设置编码格式 // // 设置缓存 // webSettings.setAppCacheEnabled(); // webSettings.setAppCachePath(); // webSettings.setAppCacheMaxSize(); // webSettings.setCacheMode(); // // 1.加载远程资源 // mWebView.loadUrl("https://www.baidu.com/"); // // // 2.加载本地资源,工程放在assets目录 // mWebView.loadUrl("file:///android_asset/WebClientTest/www/index.html"); // // // 3.加载手机本地的html页面 // mWebView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html"); String url = "https://www.sogou.com/"; mWebView.loadUrl(url); mWebView.getProgress(); } /** * 返回事件处理 */ @Override public void onBackPressed() { if (mWebView.canGoBack()) { mWebView.goBack(); } else { super.onBackPressed(); } // // 是否可以后退 // mWebView.canGoBack(); // // 后退网页 // mWebView.goBack(); // // // 是否可以前进 // mWebView.canGoForward(); // // 前进网页 // mWebView.goForward(); // // // 以当前的index为起始点前进或者后退到历史记录中指定的steps // // 如果steps为负数则为后退,正数则为前进 // mWebView.goBackOrForward(steps); } @Override protected void onDestroy() { // // 清除网页访问留下的缓存 // // 由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序. // mWebView.clearCache(true); // // // 清除当前webview访问的历史记录 // // 只会webview访问历史记录里的所有记录除了当前访问记录 // mWebView.clearHistory(); // // // 这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据 // mWebView.clearFormData(); RelativeLayout pView = (RelativeLayout) mWebView.getParent(); pView.removeView(mWebView); mWebView.destroy(); super.onDestroy(); } }
WebViewClientSuper
public class WebViewClientSuper extends WebViewClient { /** * 页面载入时调用 * @param view * @param url * @param favicon */ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } /** * 页面加载完成调用 * @param view * @param url */ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } /** * 加载页面资源时会调用 * 可以在此重载页面,劫持页面 * @param view * @param url */ @Override public void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); } /** * * @param view * @param url * @return */ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { return super.shouldOverrideUrlLoading(view, request); } /** * 可以在此重载资源文件 * @param view * @param url * @return */ @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { return super.shouldInterceptRequest(view, url); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { return super.shouldInterceptRequest(view, request); } /** * 页面加载错误事调用 * @param view * @param request * @param error */ @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); } }
参考文档:
博客地址
https://developer.android.com/reference/android/webkit/WebView.html
开源项目
https://github.com/search?utf8=%E2%9C%93&q=android+webview&type=
https://github.com/yale8848/CacheWebView
https://github.com/Tencent/VasSonic
测试地址