WebView的使用及添加進度條,webview添加進度條

來源:互聯網
上載者:User

WebView的使用及添加進度條,webview添加進度條

實現的效果比較簡單類似於開啟網頁,頭部有個進度條顯示載入進度

1.在安卓端載入一個網頁

webView.loadUrl(urlString);

2.顯示網頁開始載入和載入的進度;不過在有時會出現onPageStarted等多次調用的情況,也許是網頁的問題,未找到處理方法

            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                // TODO Auto-generated method stub                super.onPageStarted(view, url, favicon);                System.out.println("Page開始  " + url  + "   " + favicon);            }                        @Override            public void onPageFinished(WebView view, String url) {                // TODO Auto-generated method stub                super.onPageFinished(view, url);                System.out.println("Page結束  " +url);            }
        webView.setWebChromeClient(new WebChromeClient(){            @Override            public void onProgressChanged(WebView view, int newProgress) {                // TODO Auto-generated method stub                super.onProgressChanged(view, newProgress);                Log.d("jiejie", "ProgressChanged++  " + newProgress);                if(newProgress ==100){                    progressBar.setVisibility(View.GONE);                    //progressBar.setProgress(newProgress);                }else {                    progressBar.setVisibility(View.VISIBLE);                    progressBar.setProgress(newProgress);//設定載入進度                }            }        });

3.重寫下ProgressBar的背景顏色progressDrawable需要使用layer-list來進行實現

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android" >    <item android:id="@android:id/background">        <shape>            <corners android:radius="2dp" />            <gradient                android:angle="270"                android:centerColor="#E3E3E3"                android:endColor="#E6E6E6"                android:startColor="#C8C8C8" />        </shape>    </item>    <item android:id="@android:id/progress">        <clip>            <shape>                <corners android:radius="2dp" />                <gradient                    android:centerColor="#4AEA2F"                    android:endColor="#31CE15"                    android:startColor="#5FEC46" />                            </shape>        </clip>    </item></layer-list>
View Code

4.WebSettings 的常用方法介紹

setJavaScriptEnabled(true);  //支援jssetPluginsEnabled(true);  //支援外掛程式 setUseWideViewPort(false);  //將圖片調整到適合webview的大小 setSupportZoom(true);  //支援縮放 setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支援內容重新布局  supportMultipleWindows();  //多視窗 setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //關閉webview中緩衝 setAllowFileAccess(true);  //設定可以訪問檔案 setNeedInitialFocus(true); //當webview調用requestFocus時為webview設定節點webview webSettings.setBuiltInZoomControls(true); //設定支援縮放 setJavaScriptCanOpenWindowsAutomatically(true); //支援通過JS開啟新視窗 setLoadWithOverviewMode(true); // 縮放至螢幕的大小setLoadsImagesAutomatically(true);  //支援自動載入圖片

5.WebViewClient 的方法全解

doUpdateVisitedHistory(WebView view, String url, boolean isReload)  //(更新記錄) onFormResubmission(WebView view, Message dontResend, Message resend) //(應用程式重新請求網頁資料) onLoadResource(WebView view, String url) // 在載入頁面資源時會調用,每一個資源(比片)的載入都會調用一次。 onPageStarted(WebView view, String url, Bitmap favicon) //這個事件就是開始載入頁面調用的,通常我們可以在這設定一個loading的頁面,告訴使用者程式在等待網路響應。 onPageFinished(WebView view, String url) //在頁面載入結束時調用。同樣道理,我們知道一個頁面載入完成,於是我們可以關閉loading 條,切換程式動作。 onReceivedError(WebView view, int errorCode, String description, String failingUrl)// (報告錯誤資訊) onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)//(擷取返回資訊授權請求)  onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) //重寫此方法可以讓webview處理https請求。 onScaleChanged(WebView view, float oldScale, float newScale) // (WebView發生改變時調用) onUnhandledKeyEvent(WebView view, KeyEvent event) //(Key事件未被載入時調用) shouldOverrideKeyEvent(WebView view, KeyEvent event)//重寫此方法才能夠處理在瀏覽器中的按鍵事件。 shouldOverrideUrlLoading(WebView view, String url) //在點擊請求的是連結是才會調用,重寫此方法返回true表明點擊網頁裡面的連結還是在當前的webview裡跳轉,不跳到瀏覽器那邊。這個函數我們可以做很多操作,比如我們讀取到某些特殊的URL,於是就可以不開啟地址,取消這個操作,進行預先定義的其他動作,這對一個程式是非常必要的。

6.主程式碼

  1 package com.item.jiejie.activity;  2   3 import com.item.jiejie.R;  4   5 import android.annotation.SuppressLint;  6 import android.app.Activity;  7 import android.graphics.Bitmap;  8 import android.os.Bundle;  9 import android.util.Log; 10 import android.view.KeyEvent; 11 import android.view.View; 12 import android.webkit.WebChromeClient; 13 import android.webkit.WebSettings; 14 import android.webkit.WebView; 15 import android.webkit.WebViewClient; 16 import android.widget.ProgressBar; 17  18 /** 19  * 實現加在一個WebView 為WebView載入時添加一個類型的進度條 20  * @author Administrator 21  * 22  */ 23 @SuppressLint("SetJavaScriptEnabled") 24 public class WebViewActivity extends Activity{ 25     private WebView webView; 26     private ProgressBar progressBar; 27     private String urlString = "http://61.156.45.47:8081/dtmsapp/sy.html"; 28     @Override 29     protected void onCreate(Bundle savedInstanceState) { 30         // TODO Auto-generated method stub 31         super.onCreate(savedInstanceState); 32         setContentView(R.layout.actvity_webview); 33         initView(); 34     } 35     private void initView() { 36         // TODO Auto-generated method stub 37         webView = (WebView)findViewById(R.id.webview); 38         progressBar = (ProgressBar)findViewById(R.id.pergress); 39         WebSettings webSettings = webView.getSettings(); 40         webSettings.setJavaScriptEnabled(true); 41         webSettings.setUseWideViewPort(true); 42         webSettings.setLoadWithOverviewMode(true); 43         webSettings.setDefaultTextEncodingName("utf-8"); 44         webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//關閉WebView中緩衝 45         webView.setWebViewClient(new WebViewClient(){ 46             @Override 47             public void onPageStarted(WebView view, String url, Bitmap favicon) { 48                 // TODO Auto-generated method stub 49                 super.onPageStarted(view, url, favicon); 50                 System.out.println("Page開始  " + url  + "   " + favicon); 51             } 52              53             @Override 54             public void onPageFinished(WebView view, String url) { 55                 // TODO Auto-generated method stub 56                 super.onPageFinished(view, url); 57                 System.out.println("Page結束  " +url); 58             } 59             @Override 60             public boolean shouldOverrideUrlLoading(WebView view, String url) { 61                 // TODO Auto-generated method stub 62                 //return super.shouldOverrideUrlLoading(view, url); 63                 view.loadUrl(url); 64                 return true; 65             } 66         }); 67         webView.setWebChromeClient(new WebChromeClient(){ 68             @Override 69             public void onProgressChanged(WebView view, int newProgress) { 70                 // TODO Auto-generated method stub 71                 super.onProgressChanged(view, newProgress); 72                 Log.d("jiejie", "ProgressChanged++  " + newProgress); 73                 if(newProgress ==100){ 74                     progressBar.setVisibility(View.GONE); 75                     //progressBar.setProgress(newProgress); 76                 }else { 77                     progressBar.setVisibility(View.VISIBLE); 78                     progressBar.setProgress(newProgress);//設定載入進度 79                 } 80             } 81         }); 82         webView.loadUrl(urlString); 83     } 84      85     //設定返回鍵動作(防止按返回鍵直接退出程式) 86         @Override 87         public boolean onKeyDown(int keyCode, KeyEvent event) { 88             // TODO 自動產生的方法存根 89             if(keyCode==KeyEvent.KEYCODE_BACK) { 90                 if(webView.canGoBack()) {//當webview不是處於第一頁面時,返回上一個頁面 91                     webView.goBack(); 92                     return true; 93                 } 94 //                else {//當webview處於第一頁面時,直接退出程式 95 //                    System.exit(0); 96 //                } 97                  98              99             }100             return super.onKeyDown(keyCode, event);101         }102 }

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.