WebView的基本使用

---恢復內容開始---html

一.實例化WebViewjava

  1. 經過xml實例化
    1. xml
      <WebView
              android:id="@+id/webview"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent" />

       

    2. myWebView = (WebView) findViewById(R.id.webview);
  2. 經過java代碼動態實例化

 WebView webView = new WebView(this);android

二.加載網頁git

      一、LoadUrl            直接加載網頁、圖片並顯示.(本地或是網絡上的網頁、圖片、gif)(默認在瀏覽器中打開)github

         使用LoadUrl  出現過的問題web

  • 亂碼問題:
    • 設置html的編碼瀏覽器

       <head>
      
          <title>這是標題</title>
      
          <meta name="content-type" content="text/html; charset=utf-8">
      
          <meta http-equlv="Content-Type" content="text/html;charset=utf-8">
      
      </ head>

       

    • 設置WebView加載頁面的編碼
      webview.getSettings().setDefaultTextEncodingName("utf-8");

       

  二、LoadData           顯示文字與圖片內容(模擬器1.五、1.6)網絡

        String htmlString = "<h1>Title</h1><p>This is HTML text<br /><i>Formatted in italics</i><br />Anothor Line</p>";
        myWebView.loadData(htmlString, "text/html", "utf-8");

         使用LoadData可能出現的問題ide

  •  特殊字符轉化問題:有四個字符比較特殊必須使用其它的字符代替,不然會報錯。分別是英文字符:'#', '%', '\' , '?' ;對應的改爲:%23, %25, %27, %3f。儘可能少轉化吧,會影響速度。
    • %,會報找不到頁面錯誤,頁面全是亂碼。this

    •  #,會讓你的goBack失效,但canGoBAck是可使用的。因而就會產生返回按鈕生效,但不能返回的狀況。

    •   \ 和? 在轉換時,會報錯,由於它會把\看成轉義符來使用。

  •  亂碼問題:修改loadData的第三個參數,使它與html頁面的編碼保持一致。


  三、LoadDataWithBase  顯示文字與圖片內容(支持多個模擬器版本)沒有試過,第一個參數和最後一個參數能夠爲null。推測:但這樣就沒有歷史記錄了。

void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl)

 

 

 

 

 

三.如何加載網頁:使用瀏覽器仍是Activity的webview

  1. //全部都在webView中打開網頁,不會使用瀏覽器打開網頁了

    myWebView.setWebViewClient(new WebViewClient());
    myWebView.loadUrl("http://www.baidu.com");

     

  2. 重寫WebViewClient類,控制網頁打開是在瀏覽器打開仍是Activity的WebView中打開
    private class MyWebViewClient extends WebViewClient
        {
            private final String TAG = MyWebViewClient.class.getSimpleName();
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.e(TAG, url+"  getHost:"+Uri.parse(url).getHost());
                if (Uri.parse(url).getHost().equals("m.baidu.com")) {
                 // This is my web site, so do not override; let my WebView load
                 // the page。在webview中加載網頁
                  return false;
                }
                // Otherwise, the link is not for a page on my site, so launch
                // another Activity that handles URLs.使用瀏覽器加載網頁
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }
        }
    
            //控制打開網頁的地方
            myWebView.setWebViewClient(new MyWebViewClient());
            myWebView.loadUrl("http://www.baidu.com");

     

四.按返回鍵的時候按瀏覽歷史退回,(前進使用myWebView.goForward();)

    /**
     * 按鍵響應,在WebView中查看網頁時,按返回鍵的時候按瀏覽歷史退回,若是不作此項處理則整個WebView返回退出
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
        // Check if the key event was the Back button and if there's history
        if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack())
        {
            /*
             *  canGoBack() 方法在網頁能夠後退時返回true。
             *  相似的,canGoForward()方法能夠檢查是否有能夠前進的歷史記錄。
             */
            // 這個是前進
            // myWebView.goForward();
            // 返回鍵退回
            myWebView.goBack();
            return true;
        }
        // If it wasn't the Back key or there's no web page history, bubble up
        // to the default
        // system behavior (probably exit the activity)
        return super.onKeyDown(keyCode, event);
    }

 代碼示例:https://github.com/bigthing33/StudyDemo.git

  在項目的WebViewActivity中.

 

---恢復內容結束---

相關文章
相關標籤/搜索