前言: 通过WebView控件可以实现加载网页的效果。
- 加载URL(网络或者本地assets文件夹下的html文件)
- 加载html代码
- Native和JavaScript的相互调用
一、加载网页的方法:
- 加载网络URL
webView.loadUrl(“https://m.baidu.com”); - 加载assets目录下的html文件
webView.loadUrl(“file:///android_asset/web.html”); - 加载html代码
webView.loadData();
webView.loadDataWithBaseURL();
二、网页的前进与后退: 相关的几个方法
- webView.canGoBack() 当前页面是否可以返回
- webView.goBack() 返回当前页面
- webView.canGoForward() 当前页面是否可以向前
- webView.goForward() 向前进入下一个页面
- webView.canGoBackOrForward(int steps) 当前页面是否可以返回或者进入下一个页面 返回值为boolean
- webView.goBackOrForward(int steps) 当前页面要前进或者后退几步
三、接下来我们以访问网络百度移动站点进行演示
1.首先实现布局页面activity_web_view.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".WebViewActivity" android:orientation="vertical" > <WebView android:id="@+id/wv" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
2.在WebViewActivity中进行加载网页的操作:
public class WebViewActivity extends AppCompatActivity { private static final String TAG = "WebViewActivity"; private WebView wv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web_view); wv = findViewById(R.id.wv); //加载本地中的html文件 // wv.loadUrl("file:///android_asset/web.html"); //设置支持js否则有些网页无法打开 wv.getSettings().setJavaScriptEnabled(true); wv.setWebViewClient(new MyClient()); wv.setWebChromeClient(new MyWebChromeClient()); //加载网络url wv.loadUrl("https://m.baidu.com"); } class MyClient extends WebViewClient{ //监听到页面发生跳转的情况,默认打开web浏览器 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { //在webView中加载要打开的链接 view.loadUrl(request.getUrl().toString()); return true; } //页面开始加载 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); Log.e(TAG, "onPageStarted: "); } //页面加载完成的回调方法 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); Log.e(TAG, "onPageFinished: "); //在webView中加载js代码 wv.loadUrl("javascript:alert('hello')"); } } class MyWebChromeClient extends WebChromeClient{ //监听网页进度 newProgress进度值在0-100 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); } //设置Activity的标题与 网页的标题一致 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); setTitle(title); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { //如果用户按的是返回键 并且WebView页面可以返回 if (keyCode==event.KEYCODE_BACK&&wv.canGoBack()){ //让WebView返回 wv.goBack(); return true; } //如果WebView不能返回 则调用默认的onKeyDown方法 退出Activity return super.onKeyDown(keyCode, event); } }
具体注释已经在代码中给出!