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

首頁 > 系統 > Android > 正文

Android混合開發教程之WebView的使用方法總結

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

前言:

今天修改項目中一個有關WebView使用的bug,激起了我總結WebView的動機,今天抽空做個總結。

簡介

WebView是一個基于webkit引擎、展現web頁面的控件。

Android的Webview在低版本和高版本采用了不同的webkit版本內核,4.4后直接使用了Chrome。

作用

  • 顯示和渲染Web頁面
  • 直接使用html文件(網絡上或本地assets中)作布局
  • 可和JavaScript交互調用

WebView控件功能強大,除了具有一般View的屬性和設置外,還可以對url請求、頁面加載、渲染、頁面交互進行強大的處理。

android,webview開發,webview使用,android的webview使用

混合開發相關博客:

  • Android混合開發之WebView使用總結
  • Android混合開發之WebView與Javascript交互

使用場景:

 1.)添加權限

<uses-permission android/235508.html">android:name="android.permission.INTERNET" /> 

 2.)布局文件

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

 3.)數據加載

 加載本地資源

webView.loadUrl(file:///android_asset/example.html);

 加載網絡資源

webView.loadUrl(www.xxx.com/index.html);

 添加請求頭信息

Map<String,String> map=new HashMap<String,String>();map.put("User-Agent","Android");webView.loadUrl("www.xxx.com/index.html",map);

也可以加載html片段

 String data = " Html 數據"; webView.loadData(data, "text/html", "utf-8");

實測會發現loadData會導致中文亂碼,所以一般情況使用如下代碼

String data = " Html 數據";webView.loadDataWithBaseURL(null,data, "text/html", "utf-8",null);

4.)支持JavaScript

     比如項目總js觸發一個native函數關閉Activity

    設置支持JavaScript

 WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true);//設置支持javascript webView.addJavascriptInterface(new JavaScriptInterface(), "xueleapp");

 JavaScriptInterface 接口定義

public class JavaScriptInterface { @android.webkit.JavascriptInterface public void doTrainFinish() { finish(); } }

5.)設置WebViewClient 主要輔助WebView處理各種通知、請求事件

比如要實現WebView中鏈接在WebView內部跳轉

webView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });

除此之外WebViewClient更多的處理網頁的地址的解析和渲染,例如

      onLoadResource//加載資源時響應
  onPageStart//在加載頁面時響應
  onPageFinish//在加載頁面結束時響應
  onReceiveError//在加載出錯時響應
  onReceivedHttpAuthRequest//獲取返回信息授權請求

  6.)設置WebChromeClient主要輔助WebView處理Javascript的對話框,網站圖標,網站title,加載進度等

   比如加載進度獲取title

webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) {  //網頁加載完成 } else {  //網頁加載中 } } });

除了上面檢測進度之外還有

  onCloseWindow//關閉WebView
  onCreateWindow() //觸發創建一個新的窗口
  onJsAlert //觸發彈出一個對話框
  onJsPrompt //觸發彈出一個提示
  onJsConfirm//觸發彈出確認提示
  onProgressChanged //加載進度
  onReceivedIcon //獲取網頁icon
  onReceivedTitle//獲取網頁title

 7.)設置網頁棧返回

    webview會默認把瀏覽過去的網頁進行壓棧存儲,所以我們有時需要實現回退到上一目錄

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (webView.canGoBack()) { webView.goBack();//返回上一瀏覽頁面 return true; } else { finish();//關閉Activity } } return super.onKeyDown(keyCode, event); }

8.)WebView 緩存控制

  • LOAD_CACHE_ONLY: 不使用網絡,只讀取本地緩存數據
  • LOAD_DEFAULT: 根據cache-control決定是否從網絡上取數據。
  • LOAD_CACHE_NORMAL: API level 17中已經廢棄, 從API level 11開始作用同LOAD_DEFAULT模式
  • LOAD_NO_CACHE: 不使用緩存,只從網絡獲取數據.
  • LOAD_CACHE_ELSE_NETWORK,只要本地有,無論是否過期,或者no-cache,都使用緩存中的數據。
WebSettings webSettings = webView.getSettings();webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 

9.)WebView屏幕自適應

 WebSettings webSettings = webView.getSettings(); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true);

 10.)其他不常用設置

WebSettings webSettings = webView.getSettings(); webSettings.setSupportZoom(true); //支持縮放 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持內容重新布局 webSettings.supportMultipleWindows(); //多窗口 webSettings.setAllowFileAccess(true); //設置可以訪問文件 webSettings.setNeedInitialFocus(true); //當webview調用requestFocus時為webview設置節點 webSettings.setBuiltInZoomControls(true); //設置支持縮放 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通過JS打開新窗口 webSettings.setLoadsImagesAutomatically(true); //支持自動加載圖片

11.)知識擴展WebViewJSBridge

雖然谷歌也提供了js與native函數互相調用的方式,但是通過addjavascriptInterface這種方式在Android 4.2以下版本存在一定的安全隱患,在Android 4.2以上也需要加@JavascriptInterface注解,否則無法調用。基于上面的原因建議學習一下

WebViewJSBridge這個比較不錯的開源框架,地址:https://github.com/firewolf-ljw/WebViewJSBridge

12.)硬件加速

 開啟硬件加速強制使用GPU渲染,確實給app流暢度帶來不小的提升,但是在使用過程中遇見webview閃爍,也有導致加載webView黑屏或者白屏

解決辦法:關閉硬件加速

 webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

 這是把webview 中的硬件加速關閉。設置LAYER_TYPE_SOFTWARE后會把當前view轉為bitmap保存。這樣就不能開多個webview,否則會報out of memory。

需要在在webview中加入如下代碼

 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { invalidate(); super.onMeasure(widthMeasureSpec, heightMeasureSpec); }

 

干我們這行,啥時候懈怠,就意味著長進的停止,長進的停止就意味著被淘汰,只能往前沖,直到鳳凰涅槃的一天!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 环江| 荔浦县| 潞西市| 湖口县| 油尖旺区| 巴东县| 仙游县| 桐乡市| 兴文县| 徐水县| 晋江市| 昭觉县| 鄂尔多斯市| 南郑县| 丰宁| 乌拉特中旗| 依安县| 克东县| 临清市| 普安县| 隆安县| 桦南县| 通海县| 西平县| 清河县| 昌乐县| 乌什县| 延寿县| 乌海市| 横峰县| 镶黄旗| 白山市| 武夷山市| 仪陇县| 德令哈市| 略阳县| 曲周县| 綦江县| 清镇市| 喀喇| 周至县|