<WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"> </WebView>
要用WebView加載頁面,使用loadUrl()html
1)加載本地文件:java
webView.loadUrl("file:///android_asset/xx.html"); //本地文件存放在assets文件中
2)加載web資源android
webView.loadUrl("http://www.baidu.com");
是頁面得到焦點web
webView.requestFocus();
在AndroidManifest.xml文件中添加: <uses-permission android:name="android.permission.INTERNET"/>
當用戶點擊一個WebView中的頁面的連接時,一般是由默認的瀏覽器打開並加載目標URL的。然而,你能夠在WebView中覆蓋這一行爲,那麼連接就會在WebView中打開。瀏覽器
//WebView加載web資源 webView.loadUrl("http://www.baidu.com"); //覆蓋webView默認經過第三方或者是系統瀏覽器打開網頁的方法,使得網頁能夠在WebView中打開 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //返回值是true的時候控制網頁在WebView中去打開,若是爲false則調用系統瀏覽器打開 view.loadUrl(url); return true; } });
若是你想要加載在WebView中的web頁面使用Javascript,你須要在WebView中啓用Javascript。去哦用Javascript,你能夠經過WebView中帶有的WebView來啓用它。你能夠經過getSettings()來獲取WebSettings的值,而後經過setJavaScriptEnabled()來啓用Javascript。緩存
//啓用支持Javascript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true);
當你的WebView覆蓋了URL加載,它會自動生成歷史訪問記錄,你能夠經過goBack()或goForward()向前或向後訪問已訪問過的站點。網絡
//改寫物理按鍵返回的邏輯 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { if(webView.canGoBack()) { //若是WebView能夠返回,則返回上一個頁面 webView.goBack(); return true; } else { //退出 System.exit(0); } } return super.onKeyDown(keyCode, event); }
因爲有些網頁可能加載緩慢,因此咱們須要去判斷頁面的加載過程,製做進度條給予用戶良好的體驗效果。app
//在網頁打開過程當中添加一個進度條對話框 webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { //newProgress: 1~100之間的整數 if(newProgress == 100) { //網頁加載完畢 closeDialog(); }else { //網頁正在加載,打開ProgressDialog openDialog(newProgress); } } }); //關閉進度條對話框 private void closeDialog() { if(progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss();; progressDialog = null; } } //打開網頁時顯示進度條對話框 private void openDialog(int newProgress) { if(progressDialog == null) { progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setTitle("正在加載..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgress(newProgress); progressDialog.show(); } else { progressDialog.setProgress(newProgress); } }
使用緩存能夠加快網頁反應速度。ide
優先使用緩存:this
WebSettings webSettings = webView.getSettings(); //WebView加載頁面優先使用緩存加載 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
不使用緩存:
//不使用緩存 webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
看一個實例:
1.新建一個項目,在activity_main.xml中添加WebView
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.demo10.MainActivity"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"> </WebView> </RelativeLayout>
2.在MainActivity.java中添加代碼:
package com.example.demo10; import android.app.ProgressDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private WebView webView; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { webView = (WebView) findViewById(R.id.webView); //WebView加載本地資源 //webView.loadUrl("file:///android_asset/index.html"); //WebView加載web資源 webView.loadUrl("http://www.baidu.com"); //覆蓋webView默認經過第三方或者是系統瀏覽器打開網頁的方法,使得網頁能夠在WebView中打開 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //返回值是true的時候控制網頁在WebView中去打開,若是爲false則調用系統瀏覽器打開 view.loadUrl(url); return true; } }); //啓用支持Javascript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); //WebView加載頁面優先使用緩存加載 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //在網頁打開過程當中添加一個進度條對話框 webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { //newProgress: 1~100之間的整數 if(newProgress == 100) { //網頁加載完畢 closeDialog(); }else { //網頁正在加載,打開ProgressDialog openDialog(newProgress); } } }); } //關閉進度條對話框 private void closeDialog() { if(progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss();; progressDialog = null; } } //打開網頁時顯示進度條對話框 private void openDialog(int newProgress) { if(progressDialog == null) { progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setTitle("正在加載..."); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgress(newProgress); progressDialog.show(); } else { progressDialog.setProgress(newProgress); } } //改寫物理按鍵返回的邏輯 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { Toast.makeText(MainActivity.this, webView.getUrl(), Toast.LENGTH_SHORT).show(); if(webView.canGoBack()) { //若是WebView能夠返回,則返回上一個頁面 webView.goBack(); return true; } else { //退出 System.exit(0); } } return super.onKeyDown(keyCode, event); } }
運行效果: