国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android開發中使用WebView控件瀏覽網頁的方法詳解

2019-10-22 18:25:52
字體:
來源:轉載
供稿:網友

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

項目中遇到數學展示問題,常規的Textview顯示處理不了數學公式,利用圖片生成對服務器又產生較大壓力,經過查詢,可以通過webview加載JS實現。IOS同樣的方法也可實現,但JS渲染效率遠高于安卓。對Webview做下總結。

1.WebView

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

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

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

2.WebSettings

WebSettings用來設置WebView的屬性和狀態。WebSettings和WebView存在于同一個生命周期中,可以使用如下的方法獲得WebSettings對象。

WebSettings webSettings = mWebView.getSettings();

在創建WebView時,系統會對WebView進行一些默認設置,當我們通過以上的方法得到WebSettings對象后,便可以從WebSettings對象中取出WebView的默認屬性和狀態了,當然了,我們也可以通過WebSettings對象對WebView的默認屬性和狀態進行設置。

WebSettings提供的一些常用的設置WebView的屬性和狀態的方法如下:

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

3.WebViewClient

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

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

可以看到,在如上的代碼中,我們通過在子類MyWebViewClient中重寫父類WebViewClient的shouldOverrideUrlLoading()方法,實現了讓新打開的網頁在當前的WebView中進行顯示,而不是調用Android系統自帶的瀏覽器進行訪問。

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

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

主要是在網頁加載失敗后去調用顯示。

4.WebChromeClient

WebChromeClient主要用來輔助WebView處理Javascript的對話框、網站圖標、網站標題以及網頁加載進度等。

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

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

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

5.WebView與Javascript

在WebView中不僅可以運行HTML代碼,更重要的是,WebView可以與Javascript互相調用。也就是說,在Javascript中可以獲取WebView的內容,與此同時,在WebView中也可以調用Javascript里面的方法。

下面就來說說如何在WebView中調用Javascript里面的方法。

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

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

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

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");

 

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大关县| 乐东| 河北区| 涿鹿县| 汤阴县| 库尔勒市| 长武县| 霞浦县| 瑞安市| 安化县| 望城县| 河池市| 塘沽区| 南投市| 康保县| 沭阳县| 湘潭市| 平阴县| 峨眉山市| 湖南省| 永州市| 桓台县| 泾阳县| 周宁县| 金沙县| 石景山区| 墨脱县| 贵溪市| 文山县| 弥渡县| 宜兰县| 阿鲁科尔沁旗| 宜君县| 德阳市| 塔河县| 卓资县| 云浮市| 汽车| 全南县| 高陵县| 迭部县|