android webview,webview

來源:互聯網
上載者:User

android webview,webview

1.WebvView是android內建的一款webkit高效能內部瀏覽器

2. (1)許可權:<uses-permission android:name="android.permission.INTERNET"/>

  (2)如果Html有JavaScript則需要設定: webView.getSettings().setJavaScriptEnabled(true);

  (3)如果頁面中有串連,點擊串連希望在Webview中繼續開啟,必需設定webView.setWebViewClient(new WebViewClient());否則會用調用系統的瀏覽器開啟。

new WebViewClient(){

    @Override

    public boolean shouldOverrideUrlLoading(WebView view, String url) {

}

WebViewClient類的shouldOverrideUrlLoading方法,當開啟一個串連時會調用此方法,url為要開啟的網頁地址.可以在特定的網頁開啟之前,做一些動作,也可以不開啟網頁

3.開啟頁面的方式

(1)開啟互連網頁面

webView.loadUrl(“http://www.google.com“);  //get形式

webView.postUrl(url,EncodingUtils.getBytes(postData,"UTF-8"));  //Post形式.url網址,postData參數:值

(2)開啟本地檔案

myWebView.loadUrl(“file:///android_asset/XX.html“)

檔案存放在assets目錄裡,以file:///android_asset/開頭,xx.html是檔案名稱

(3)直接載入html字串

myWebView.loadData(htmlString, "text/html", "utf-8");

 

4.後退與前進

按返回鍵時,如果不做任何處理,則會退出整個Browser,如果要返回到上一頁使用webView.goBack();前進使用webView.goForward();如果達到曆史頂端執行這兩個動作則不會執行任何動作,所以在執行之前先進行判斷:webView.canGoBack()和webView.canGoForward()。

@Override

    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()){

            webView.goBack();

            return true;

        }

        return super.onKeyDown(keyCode, event);

    }

 

 

5.WebView與javascript互動

 (1)javascript訪問java代碼

  java代碼: webView.addJavascriptInterface(new Object(){

           public void onBack(){      

            }

       },"test");

  javascript: <a onClick="window.test.onBack ()">。

 

 通過addJavascriptInterface(Object,String)方法

test是暴露給JS的介面名,對應Object對象執行個體,javascript通過window.test.onBack ()調用Object的onBack()方法。

當調用Object時,會另起一個線程

 

(2)java訪問javascript

mWebView.loadUrl("javascript:test('aa')"); 其中test是javascript的方法

可在test函數裡將資料alert,然後webview中重寫WebChromeClient的onJsAlert函數,具體代碼如下

[java] view plaincopy

wv.setWebChromeClient(new MyWebChromeClient()); 

 

final  class MyWebChromeClient extends WebChromeClient{ 

 

    @Override 

 

      public booleanonJsAlert(WebView view, String url, String message, final JsResult result) {  

 

//message就是test函數裡alert的字串,這樣你就可以在android用戶端裡對這個資料進行處理 

  

                result.confirm();         

 

              }  

 

 return true;   

        } 

 

6自訂一個帶進度條的WebView

public class ProgressWebview extends WebView{

         private ProgressBar progressBar;

 

         public ProgressWebview(Context context, AttributeSet attrs) {

                   super(context, attrs);

                   progressBar = new ProgressBar(context, null,android.R.attr.progressBarStyleHorizontal);

                   progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,4,0,0));

                   addView(progressBar);

                   setWebChromeClient(new WebChrmoeClient());

         }

 

         /*

          * 顯示進度條

          */

         public class WebChrmoeClient extends WebChromeClient{

                   @Override

                   public void onProgressChanged(WebView view, int newProgress) {

                            if(newProgress==100){

                                     progressBar.setVisibility(View.GONE);

                            }else {

                                     if(progressBar.getVisibility() == GONE){

                                               progressBar.setVisibility(View.VISIBLE);

                                     }

                                     progressBar.setProgress(newProgress);

                            }

                            super.onProgressChanged(view, newProgress);

                   }

                  

                  

                   @Override

                   public boolean onJsAlert(WebView view, String url, String message,

                                     JsResult result) {

                            // TODO Auto-generated method stub

                            return super.onJsAlert(view, url, message, result);

                   }

         }

        

         @Override

         protected void onScrollChanged(int l, int t, int oldl, int oldt) {

                   // TODO Auto-generated method stub

                   LayoutParams params = (LayoutParams) progressBar.getLayoutParams();

                   params.x = l;

                   params.y = t;

                   progressBar.setLayoutParams(params);

                   super.onScrollChanged(l, t, oldl, oldt);

         }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.