Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android-使用WebView顯示網頁淺析

Android-使用WebView顯示網頁淺析

編輯:關於Android編程

Android-使用WebView顯示網頁


WebView是安卓提供顯示web界面的工具類,可以像PC端的浏覽器那樣進行顯示:
這裡寫圖片描述
大致就是上圖那樣。其實也可以不用WebView,簡單的三行代碼就可以在安卓App上顯示網頁界面。


示例

Uri uri = Uri.parse("http://www.baidu.com");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);

運行效果:
這裡寫圖片描述


使用WebView
布局文件




    




主活動

package com.xieth.as.webviewdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

    private WebView webView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews();

        webView.loadUrl("http://www.baidu.com");

    }

    private void initViews() {
        webView = (WebView) findViewById(R.id.id_webView);
    }

}

但是結果:
這裡寫圖片描述
記住要添加訪問網絡權限

   

OK,現在可以了
這裡寫圖片描述


可以看到有選擇浏覽器的對話框。其實我們可以通過代碼來指定浏覽器來顯示,不需要再次選擇。

    webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

運行效果:
這裡寫圖片描述
可以看到沒有出現那個選擇框了。默認是安卓設備自帶的浏覽器,而不是第三方的。


WebView中使用JavaScript

        // 啟用支持JavaScript
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);

但是有一個不好的用戶體驗。
這裡寫圖片描述
在我們浏覽一個頁面,再次進入另外一個頁面的時候,點擊返回鍵,重新回到上次頁面的時候,
但是卻退出了,這是一個非常不好的用戶體驗。
可以通過代碼進行改善。

 // 重寫方法使之可以返回上次的頁面
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (webView.canGoBack()) {  // 判斷當前頁面是否處於首部
                webView.goBack();// 返回上一頁面
                return true;
            } else { // 如果當前頁面是第一個頁面
                System.exit(0); // 退出程序
            }
        }
        return super.onKeyDown(keyCode, event);
    }

效果:
這裡寫圖片描述
這樣就OK了


判斷網頁的加載過程
在使用浏覽器訪問網頁的時候,有時候會加載慢,有時候會很快,所以為了給用戶更加良好的體驗,
我們可以通過進度條的方式來進行展示。

 // 進度條顯示網頁的加載過程
        webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public void onProgressChanged(WebView view, int newProgress) {

                if (newProgress == 100) {
                    // 加載完畢
                    closeDialog(newProgress);
                } else {
                    openDialog(newProgress);
                }


                super.onProgressChanged(view, newProgress);
            }

            private void openDialog(int newProgress) {
                if (dialog == null) {
                    dialog = new ProgressDialog(MainActivity.this);
                    dialog.setTitle("正在加載");
                    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    dialog.setProgress(newProgress);
                    dialog.show();
                } else {
                    dialog.setProgress(newProgress);
                }
            }

            private void closeDialog(int newProgress) {
                if (dialog != null && dialog.isShowing()) {
                    dialog.dismiss();
                    dialog = null;
                }
            }
        });

運行:
這裡寫圖片描述


WebView使用緩存優化<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwcmUgY2xhc3M9"brush:java;"> // 優先使用緩存優化效率 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);


完整代碼

package com.xieth.as.webviewdemo;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    private WebView webView = null;

    private ProgressDialog dialog = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initViews();

        webView.loadUrl("http://www.baidu.com");

        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        // 啟用支持JavaScript
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);


        // 進度條顯示網頁的加載過程
        webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public void onProgressChanged(WebView view, int newProgress) {

                if (newProgress == 100) {
                    // 加載完畢
                    closeDialog(newProgress);
                } else {
                    openDialog(newProgress);
                }


                super.onProgressChanged(view, newProgress);
            }

            private void openDialog(int newProgress) {
                if (dialog == null) {
                    dialog = new ProgressDialog(MainActivity.this);
                    dialog.setTitle("正在加載");
                    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    dialog.setProgress(newProgress);
                    dialog.show();
                } else {
                    dialog.setProgress(newProgress);
                }
            }

            private void closeDialog(int newProgress) {
                if (dialog != null && dialog.isShowing()) {
                    dialog.dismiss();
                    dialog = null;
                }
            }
        });
        // 優先使用緩存優化效率
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

    }

    // 重寫方法使之可以返回上次的頁面
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (webView.canGoBack()) {  // 判斷當前頁面是否處於首部
                webView.goBack();// 返回上一頁面
                return true;
            } else { // 如果當前頁面是第一個頁面
                System.exit(0); // 退出程序
            }
        }
        return super.onKeyDown(keyCode, event);
    }

    private void initViews() {
        webView = (WebView) findViewById(R.id.id_webView);
    }

}

   
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved