最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android混合開(kāi)發(fā)教程之WebView的使用方法總結(jié)

 更新時(shí)間:2018年05月06日 09:18:40   作者:總李寫(xiě)代碼  
WebView是一個(gè)基于webkit引擎、展現(xiàn)web頁(yè)面的控件,下面這篇文章主要給大家介紹了關(guān)于Android混合開(kāi)發(fā)教程之WebView的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧

前言:

今天修改項(xiàng)目中一個(gè)有關(guān)WebView使用的bug,激起了我總結(jié)WebView的動(dòng)機(jī),今天抽空做個(gè)總結(jié)。

簡(jiǎn)介

WebView是一個(gè)基于webkit引擎、展現(xiàn)web頁(yè)面的控件。

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

作用

  • 顯示和渲染W(wǎng)eb頁(yè)面
  • 直接使用html文件(網(wǎng)絡(luò)上或本地assets中)作布局
  • 可和JavaScript交互調(diào)用

WebView控件功能強(qiáng)大,除了具有一般View的屬性和設(shè)置外,還可以對(duì)url請(qǐng)求、頁(yè)面加載、渲染、頁(yè)面交互進(jìn)行強(qiáng)大的處理。

混合開(kāi)發(fā)相關(guān)博客:

使用場(chǎng)景:

 1.)添加權(quán)限

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

 2.)布局文件

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

 3.)數(shù)據(jù)加載

 加載本地資源

 加載網(wǎng)絡(luò)資源

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

 添加請(qǐng)求頭信息

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 數(shù)據(jù)";
 webView.loadData(data, "text/html", "utf-8");

實(shí)測(cè)會(huì)發(fā)現(xiàn)loadData會(huì)導(dǎo)致中文亂碼,所以一般情況使用如下代碼

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

4.)支持JavaScript

     比如項(xiàng)目總js觸發(fā)一個(gè)native函數(shù)關(guān)閉Activity

    設(shè)置支持JavaScript

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

 JavaScriptInterface 接口定義

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

5.)設(shè)置WebViewClient 主要輔助WebView處理各種通知、請(qǐng)求事件

比如要實(shí)現(xiàn)WebView中鏈接在WebView內(nèi)部跳轉(zhuǎn)

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

除此之外WebViewClient更多的處理網(wǎng)頁(yè)的地址的解析和渲染,例如

      onLoadResource//加載資源時(shí)響應(yīng)
  onPageStart//在加載頁(yè)面時(shí)響應(yīng)
  onPageFinish//在加載頁(yè)面結(jié)束時(shí)響應(yīng)
  onReceiveError//在加載出錯(cuò)時(shí)響應(yīng)
  onReceivedHttpAuthRequest//獲取返回信息授權(quán)請(qǐng)求

  6.)設(shè)置WebChromeClient主要輔助WebView處理Javascript的對(duì)話(huà)框,網(wǎng)站圖標(biāo),網(wǎng)站title,加載進(jìn)度等

   比如加載進(jìn)度獲取title

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

除了上面檢測(cè)進(jìn)度之外還有

  onCloseWindow//關(guān)閉WebView
  onCreateWindow() //觸發(fā)創(chuàng)建一個(gè)新的窗口
  onJsAlert //觸發(fā)彈出一個(gè)對(duì)話(huà)框
  onJsPrompt //觸發(fā)彈出一個(gè)提示
  onJsConfirm//觸發(fā)彈出確認(rèn)提示
  onProgressChanged //加載進(jìn)度
  onReceivedIcon //獲取網(wǎng)頁(yè)icon
  onReceivedTitle//獲取網(wǎng)頁(yè)title

 7.)設(shè)置網(wǎng)頁(yè)棧返回

    webview會(huì)默認(rèn)把瀏覽過(guò)去的網(wǎng)頁(yè)進(jìn)行壓棧存儲(chǔ),所以我們有時(shí)需要實(shí)現(xiàn)回退到上一目錄

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

8.)WebView 緩存控制

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

9.)WebView屏幕自適應(yīng)

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

 10.)其他不常用設(shè)置

WebSettings webSettings = webView.getSettings();
 webSettings.setSupportZoom(true); //支持縮放
 webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持內(nèi)容重新布局
 webSettings.supportMultipleWindows(); //多窗口
 webSettings.setAllowFileAccess(true); //設(shè)置可以訪(fǎng)問(wèn)文件
 webSettings.setNeedInitialFocus(true); //當(dāng)webview調(diào)用requestFocus時(shí)為webview設(shè)置節(jié)點(diǎn)
 webSettings.setBuiltInZoomControls(true); //設(shè)置支持縮放
 webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通過(guò)JS打開(kāi)新窗口
 webSettings.setLoadsImagesAutomatically(true); //支持自動(dòng)加載圖片

11.)知識(shí)擴(kuò)展WebViewJSBridge

雖然谷歌也提供了js與native函數(shù)互相調(diào)用的方式,但是通過(guò)addjavascriptInterface這種方式在Android 4.2以下版本存在一定的安全隱患,在Android 4.2以上也需要加@JavascriptInterface注解,否則無(wú)法調(diào)用?;谏厦娴脑蚪ㄗh學(xué)習(xí)一下

WebViewJSBridge這個(gè)比較不錯(cuò)的開(kāi)源框架,地址:https://github.com/firewolf-ljw/WebViewJSBridge

12.)硬件加速

 開(kāi)啟硬件加速?gòu)?qiáng)制使用GPU渲染,確實(shí)給app流暢度帶來(lái)不小的提升,但是在使用過(guò)程中遇見(jiàn)webview閃爍,也有導(dǎo)致加載webView黑屏或者白屏

解決辦法:關(guān)閉硬件加速

 webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

 這是把webview 中的硬件加速關(guān)閉。設(shè)置LAYER_TYPE_SOFTWARE后會(huì)把當(dāng)前view轉(zhuǎn)為bitmap保存。這樣就不能開(kāi)多個(gè)webview,否則會(huì)報(bào)out of memory。

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

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

 

干我們這行,啥時(shí)候懈怠,就意味著長(zhǎng)進(jìn)的停止,長(zhǎng)進(jìn)的停止就意味著被淘汰,只能往前沖,直到鳳凰涅槃的一天!

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Android?無(wú)障礙服務(wù)?performAction?調(diào)用過(guò)程分析

    Android?無(wú)障礙服務(wù)?performAction?調(diào)用過(guò)程分析

    這篇文章主要介紹了Android?無(wú)障礙服務(wù)?performAction?調(diào)用過(guò)程分析,無(wú)障礙服務(wù)可以模擬一些用戶(hù)操作,無(wú)障礙可以處理的對(duì)象,通過(guò)類(lèi)?AccessibilityNodeInfo?表示,通過(guò)無(wú)障礙服務(wù),可以通過(guò)它的performAction方法來(lái)觸發(fā)一些action
    2022-06-06
  • Android實(shí)現(xiàn)視頻圖片輪播功能

    Android實(shí)現(xiàn)視頻圖片輪播功能

    視頻與圖片輪播功能是一種常見(jiàn)的用戶(hù)交互方式,廣泛應(yīng)用于多媒體展示、廣告輪播、資訊閱讀、產(chǎn)品推薦等場(chǎng)景,在這種模式下,應(yīng)用能同時(shí)支持圖片和視頻的自動(dòng)或手動(dòng)輪播播放,本項(xiàng)目旨在基于 Android 平臺(tái),構(gòu)建一個(gè)支持視頻與圖片混合輪播的解決方案,需要的朋友可以參考下
    2025-04-04
  • android中選中菜單的顯示跳轉(zhuǎn)和隱式跳轉(zhuǎn)的實(shí)例介紹

    android中選中菜單的顯示跳轉(zhuǎn)和隱式跳轉(zhuǎn)的實(shí)例介紹

    android中選中菜單的顯示跳轉(zhuǎn)和隱式跳轉(zhuǎn)的實(shí)例介紹,需要的朋友可以參考一下
    2013-05-05
  • Android幀率監(jiān)測(cè)與優(yōu)化技巧

    Android幀率監(jiān)測(cè)與優(yōu)化技巧

    Android 應(yīng)用的性能優(yōu)化是開(kāi)發(fā)過(guò)程中至關(guān)重要的一環(huán),而幀率(Frame Rate)是評(píng)估應(yīng)用性能的一個(gè)關(guān)鍵指標(biāo),在本文中,我們將深入探討如何監(jiān)測(cè) Android 應(yīng)用的幀率,以及如何通過(guò)代碼示例來(lái)優(yōu)化應(yīng)用的性能,需要的朋友可以參考下
    2023-10-10
  • ViewPager2滑動(dòng)沖突解決方案

    ViewPager2滑動(dòng)沖突解決方案

    這篇文章主要介紹了ViewPager2滑動(dòng)沖突解決方案,幫助大家更好的進(jìn)行Android開(kāi)發(fā),感興趣的朋友可以了解下
    2020-12-12
  • 淺談Android手機(jī)聯(lián)系人開(kāi)發(fā)之增刪查改功能

    淺談Android手機(jī)聯(lián)系人開(kāi)發(fā)之增刪查改功能

    這篇文章主要介紹了Android手機(jī)聯(lián)系人開(kāi)發(fā)之增刪查改功能,需要的朋友可以參考下
    2017-05-05
  • android驗(yàn)證郵箱輸入是否合法

    android驗(yàn)證郵箱輸入是否合法

    這篇文章主要為大家詳細(xì)介紹了android驗(yàn)證郵箱輸入是否合法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Android Studio gradle配置packagingOptions打包so庫(kù)重復(fù)

    Android Studio gradle配置packagingOptions打包so庫(kù)重復(fù)

    這篇文章主要為大家介紹了Android Studio gradle配置packagingOptions打包so庫(kù)重復(fù)問(wèn)題的解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android里面的Service種類(lèi)以及啟動(dòng)方式

    Android里面的Service種類(lèi)以及啟動(dòng)方式

    Android中的Service分為前臺(tái)服務(wù)和后臺(tái)服務(wù),前臺(tái)服務(wù)需要亮身份牌并顯示通知,后臺(tái)服務(wù)則有啟動(dòng)方式選擇,包括startService和bindService,選擇啟動(dòng)方式應(yīng)根據(jù)任務(wù)類(lèi)型和場(chǎng)景進(jìn)行,需要的朋友可以參考下
    2025-02-02
  • Android開(kāi)發(fā)手冊(cè)TextView控件及陰影效果實(shí)現(xiàn)

    Android開(kāi)發(fā)手冊(cè)TextView控件及陰影效果實(shí)現(xiàn)

    這篇文章主要為大家介紹了Android開(kāi)發(fā)手冊(cè)TextView控件及陰影效果的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論

海林市| 长岭县| 惠水县| 仙游县| 手游| 丹东市| 建宁县| 邓州市| 梧州市| 出国| 内乡县| 中牟县| 巴青县| 河曲县| 永善县| 孝感市| 嘉义市| 芒康县| 搜索| 柘荣县| 临洮县| 清镇市| 罗定市| 承德市| 广宁县| 尉犁县| 北碚区| 中牟县| 大宁县| 镇安县| 锦屏县| 凯里市| 崇左市| 东乡县| 洞头县| 建德市| 黔东| 宁化县| 河源市| 翁牛特旗| 元朗区|