【Android筆記】WebView的使用

1.加入WebView

<WebView
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</WebView>

2.使用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();

3.獲取網絡訪問權限

在AndroidManifest.xml文件中添加:

<uses-permission android:name="android.permission.INTERNET"/>

4.處理頁面導航

  當用戶點擊一個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;
    }
});

5.在WebView中使用Javascript

    若是你想要加載在WebView中的web頁面使用Javascript,你須要在WebView中啓用Javascript。去哦用Javascript,你能夠經過WebView中帶有的WebView來啓用它。你能夠經過getSettings()來獲取WebSettings的值,而後經過setJavaScriptEnabled()來啓用Javascript。緩存

//啓用支持Javascript
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

6.後退與前進

    當你的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);
}

7.頁面加載過程進度條

    因爲有些網頁可能加載緩慢,因此咱們須要去判斷頁面的加載過程,製做進度條給予用戶良好的體驗效果。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);
    }
}

8.WebView緩存的運用

使用緩存能夠加快網頁反應速度。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);
    }
}

運行效果:

相關文章
相關標籤/搜索