欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android開發(fā)中使用WebView控件瀏覽網(wǎng)頁的方法詳解

 更新時(shí)間:2017年10月12日 11:42:10   作者:jia635  
這篇文章主要介紹了Android開發(fā)中使用WebView控件瀏覽網(wǎng)頁的方法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了Android WebView控件的功能、布局、設(shè)置、常用方法及相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Android開發(fā)中使用WebView控件瀏覽網(wǎng)頁的方法。分享給大家供大家參考,具體如下:

項(xiàng)目中遇到數(shù)學(xué)展示問題,常規(guī)的Textview顯示處理不了數(shù)學(xué)公式,利用圖片生成對(duì)服務(wù)器又產(chǎn)生較大壓力,經(jīng)過查詢,可以通過webview加載JS實(shí)現(xiàn)。IOS同樣的方法也可實(shí)現(xiàn),但JS渲染效率遠(yuǎn)高于安卓。對(duì)Webview做下總結(jié)。

1.WebView

在使用WebView控件時(shí),首先需要在xml布局文件中定義一個(gè)WebView控件,定義的方法如下:

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

WebView中提供了很多方法,例如,我們可以使用canGoBack()方法判斷是否能夠從該網(wǎng)頁返回上一個(gè)打開的網(wǎng)頁;使用getTitle()getUrl()方法獲得當(dāng)前網(wǎng)頁的標(biāo)題和URL路徑;使用loadUrl(String url)方法加載所要打開的網(wǎng)頁等等。如下的代碼通過使用loadUrl()方法在WebView控件中打開了百度主頁。

2.WebSettings

WebSettings用來設(shè)置WebView的屬性和狀態(tài)。WebSettings和WebView存在于同一個(gè)生命周期中,可以使用如下的方法獲得WebSettings對(duì)象。

WebSettings webSettings = mWebView.getSettings();

在創(chuàng)建WebView時(shí),系統(tǒng)會(huì)對(duì)WebView進(jìn)行一些默認(rèn)設(shè)置,當(dāng)我們通過以上的方法得到WebSettings對(duì)象后,便可以從WebSettings對(duì)象中取出WebView的默認(rèn)屬性和狀態(tài)了,當(dāng)然了,我們也可以通過WebSettings對(duì)象對(duì)WebView的默認(rèn)屬性和狀態(tài)進(jìn)行設(shè)置。

WebSettings提供的一些常用的設(shè)置WebView的屬性和狀態(tài)的方法如下:

(1)setAllowFileAccess(boolean allow); //設(shè)置啟用或禁止訪問文件數(shù)據(jù)
(2)setBuiltInZoomControls(boolean enabled); //設(shè)置是否支持縮放
(3)setDefaultFontSize(int size);    //設(shè)置默認(rèn)的字體大小
(4)setJavaScriptEnabled(boolean flag);  //設(shè)置是否支持JavaScript
(5)setSupportZoom(boolean support); //設(shè)置是否支持變焦

3.WebViewClient

WebViewClient主要用來輔助WebView處理各種通知、請(qǐng)求等事件。我們可以通過WebView的setWebViewClient()方法,為WebView對(duì)象指定一個(gè)WebViewClient,具體的實(shí)現(xiàn)方法如下所示:

MyWebViewClient myWebViewClient = new MyWebViewClient();
mWebView.setWebViewClient(myWebViewClient);
private class MyWebViewClient extends WebViewClient {
    //重寫父類方法,讓新打開的網(wǎng)頁在當(dāng)前的WebView中顯示
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      view.loadUrl(url);
      return true;
    }
}

可以看到,在如上的代碼中,我們通過在子類MyWebViewClient中重寫父類WebViewClient的shouldOverrideUrlLoading()方法,實(shí)現(xiàn)了讓新打開的網(wǎng)頁在當(dāng)前的WebView中進(jìn)行顯示,而不是調(diào)用Android系統(tǒng)自帶的瀏覽器進(jìn)行訪問。

在WebViewClient中同樣提供了很多的方法,比如以下一些:

(1)doUpdateVisitedHistory(WebView view, String url, boolean isReload);   //更新歷史記錄
(2)onFormResubmission(WebView view, Message dontResend, Message resend);  //重新請(qǐng)求網(wǎng)頁數(shù)據(jù)
(3)onLoadResource(WebView view, String url); //加載指定網(wǎng)址提供的資源
(4)onPageFinished(WebView view, String url);  //網(wǎng)頁加載完畢
我們所做的JS渲染就是在 onpageFinish 之后進(jìn)行的,JS 越復(fù)雜,渲染越慢。
(5)onPageStarted(WebView view, String url, Bitmap favicon);//網(wǎng)頁開始加載
(6)onReceivedError(WebView view, int errorCode, String description, String failingUrl);//報(bào)告錯(cuò)誤信息

主要是在網(wǎng)頁加載失敗后去調(diào)用顯示。

4.WebChromeClient

WebChromeClient主要用來輔助WebView處理Javascript的對(duì)話框、網(wǎng)站圖標(biāo)、網(wǎng)站標(biāo)題以及網(wǎng)頁加載進(jìn)度等。

同樣地,我們可以通過WebView的setWebChromeClient()方法,為WebView對(duì)象指定一個(gè)WebChromeClient。

在WebChromeClient中,當(dāng)網(wǎng)頁的加載進(jìn)度發(fā)生變化時(shí),onProgressChanged(WebView view, int newProgress)方法會(huì)被調(diào)用;當(dāng)網(wǎng)頁的圖標(biāo)發(fā)生改變時(shí),onReceivedIcon(WebView view, Bitmap icon)方法會(huì)被調(diào)用;當(dāng)網(wǎng)頁的標(biāo)題發(fā)生改變時(shí),onReceivedTitle(WebView view, String title)方法會(huì)被調(diào)用。利用這些方法,我們便可以很容易的獲得網(wǎng)頁的加載進(jìn)度、網(wǎng)頁的標(biāo)題和圖標(biāo)等信息了,正如下面的代碼所示:

MyWebChromeClient myWebChromeClient = new MyWebChromeClient();
mWebView.setWebChromeClient(myWebChromeClient);
private class MyWebChromeClient extends WebChromeClient {
    //獲得網(wǎng)頁的加載進(jìn)度,顯示在右上角的TextView控件中
    public void onProgressChanged(WebView view, int newProgress) {
      if(newProgress < 100) {
        String progress = newProgress + "%";
        mTextView_progress.setText(progress);
      } else {
        mTextView_progress.setText(" ");
      }
    }
    //獲得網(wǎng)頁的標(biāo)題,作為應(yīng)用程序的標(biāo)題進(jìn)行顯示
    public void onReceivedTitle(WebView view, String title) {
      MainActivity.this.setTitle(title);
    }
}

5.WebView與Javascript

在WebView中不僅可以運(yùn)行HTML代碼,更重要的是,WebView可以與Javascript互相調(diào)用。也就是說,在Javascript中可以獲取WebView的內(nèi)容,與此同時(shí),在WebView中也可以調(diào)用Javascript里面的方法。

下面就來說說如何在WebView中調(diào)用Javascript里面的方法。

這里,我使用了百度地圖的API接口(一份內(nèi)嵌了Javascript的HTML文檔),在該接口中提供如下的Javascript方法:

/*********************************/
/*      查找地點(diǎn)      */
/*********************************/
var city = new BMap.LocalSearch(map,{renderOptions:{map:map,autoViewport:true}});
function findPlace(place)
{
    city.search(place);
}

我們要做的就是在WebView中調(diào)用findPlace()方法,完成地點(diǎn)的查找。在WebView中調(diào)用Javascript里面的方法是通過代碼WebView.loadUrl("javascript:方法名()")來實(shí)現(xiàn)的。如下的代碼,從EditText控件中獲得用戶想要查找的地名,然后調(diào)用了Javascript中的findPlace()方法,進(jìn)行查找。

public void onClick(View view) {
    switch(view.getId()) {
    case R.id.imagebutton_search: //查找地名
      String str = mEditText_input.getText().toString();
      String url = "javascript:findPlace('" + str + "')";
      mWebView.loadUrl(url);
      break;
    }
}

6  Webview 加載JS 的加速

public void optimizaWebview() {
    if (webView != null) {
      if (Build.VERSION.SDK_INT >= 19) {
        webView.getSettings().setLoadsImagesAutomatically(true);
      } else {
        webView.getSettings().setLoadsImagesAutomatically(false);
      }
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
      }
      webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
      webView.getSettings().setBlockNetworkImage(true);
      webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
      webView.getSettings().setDatabaseEnabled(true);
      webView.getSettings().setAppCacheEnabled(true);
      webView.getSettings().setAppCachePath("/data/data/com.kuailexue.student/cache");
      webView.getSettings().setAppCacheMaxSize(5 * 1024 * 1024);
      webView.setHorizontalScrollBarEnabled(true);
      webView.getSettings().setJavaScriptEnabled(true);
      webView.setWebChromeClient(new WebChromeClient());
      webView.getSettings().setDomStorageEnabled(true);
    }
}

加載String

webView.loadDataWithBaseURL(null, buffer.toString(), text/html, UTF-8, null);

webview 加載圖片

<img src="imgurl"/>

加載 assets 下的html

webView.loadUrl("file:///android_asset/index.html");

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android布局layout技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Bootstrap 下拉菜單.dropdown的具體使用方法

    Bootstrap 下拉菜單.dropdown的具體使用方法

    這篇文章主要介紹了Bootstrap 下拉菜單.dropdown的具體使用方法,詳細(xì)講解下拉菜單的交互,有興趣的可以了解一下
    2017-10-10
  • Android實(shí)現(xiàn)完整游戲循環(huán)的方法

    Android實(shí)現(xiàn)完整游戲循環(huán)的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)完整游戲循環(huán)的方法,以實(shí)例代碼形式較為詳細(xì)的分析了Android游戲循環(huán)的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • Android自定義View實(shí)現(xiàn)圓環(huán)進(jìn)度條

    Android自定義View實(shí)現(xiàn)圓環(huán)進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)圓環(huán)進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Android 一些常用的混淆Proguard

    Android 一些常用的混淆Proguard

    這篇文章主要介紹了Android 一些常用的混淆Proguard,幫助大家更好的理解和使用Android,感興趣的朋友可以了解下
    2021-02-02
  • Android實(shí)現(xiàn)計(jì)時(shí)器功能

    Android實(shí)現(xiàn)計(jì)時(shí)器功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)計(jì)時(shí)器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • android編程之xml文件讀取和寫入方法

    android編程之xml文件讀取和寫入方法

    這篇文章主要介紹了android編程之xml文件讀取和寫入方法,涉及Android針對(duì)XML文件的相關(guān)操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Android使用WindowManager構(gòu)造懸浮view

    Android使用WindowManager構(gòu)造懸浮view

    這篇文章主要為大家詳細(xì)介紹了Android使用WindowManager構(gòu)造懸浮view的具體方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android實(shí)現(xiàn)調(diào)用系統(tǒng)相冊(cè)和拍照的Demo示例

    Android實(shí)現(xiàn)調(diào)用系統(tǒng)相冊(cè)和拍照的Demo示例

    這篇文章主要介紹了Android實(shí)現(xiàn)調(diào)用系統(tǒng)相冊(cè)和拍照的Demo示例,實(shí)例分析了Android調(diào)用系統(tǒng)相冊(cè)及拍照的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-10-10
  • android studio3.0以上如何通過navicat訪問SQLite數(shù)據(jù)庫文件

    android studio3.0以上如何通過navicat訪問SQLite數(shù)據(jù)庫文件

    這篇文章主要介紹了android studio3.0以上如何通過navicat訪問SQLite數(shù)據(jù)庫文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Android Listview notifyDataSetChanged() 不起作用的解決方案

    Android Listview notifyDataSetChanged() 不起作用的

    這篇文章主要介紹了Android Listview notifyDataSetChanged()不起作用的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08

最新評(píng)論