作者:lijiankun24
链接:https://www.jianshu.com/p/c7166cecd77e
现在 Android 应用中都会多多少少嵌入一些 H5 页面,在 Android SDK 中有一个名为 WebView 的组件,它是一个 webkit 内核的高性能浏览器,在 Android 应用中的 H5 页面用它展示是非常合适的。本篇文章就介绍一下 WebView 相关的一些知识,相关代码放在 GitHub 的 WebViewPractice 的工程里。
本篇文章主要介绍以下几点:
- WebView 的简单使用
- WebViewClient
- WebChromeClient
- WebViewClient 和 WebChromeClient 的区别
- Js 和 Java 代码的交互
- WebView 的缓存
- WebView 引起的内存泄露
1. WebView 的简单使用
如果只是想简单地使用 WebView,通过下面几步即可展示一般功能需求的 H5 页面。
-
在
AndroidManifest.xml
申请网络权限 -
在 XML 布局文件中添加
WebView
控件,并在 Java 代码中得到该 WebView 的对象<!-- activity_main.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll_webview_root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> ...... <WebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent"/> ...... </LinearLayout>
// MainActivity.java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @TargetApi(21) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toString()); return true; } }); webView.loadUrl("https://ke.youdao.com"); }
-
如果访问的页面中含有 JavaScript 的代码,则需要设置 WebView 支持 Javascript。
webView.getSettings().setJavaScriptEnabled(true);
-
如果页面中含有连接,点击链接如果想继续在当前浏览器中浏览网页,则需要重写 WebView 的 WebViewClient 对象。
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @TargetApi(21) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.</