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

Android程序開發(fā)之WebView使用總結(jié)

 更新時(shí)間:2016年07月06日 09:58:38   作者:總李寫代碼  
這篇文章主要介紹了Android程序開發(fā)之WebView使用總結(jié)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

前言:

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

使用場(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ù)加載

加載本地資源

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

加載網(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ì)話框,網(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ì)話框
  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開始作用同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è)置可以訪問(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打開新窗口
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)用。基于上面的原因建議學(xué)習(xí)一下

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

12.)硬件加速

開啟硬件加速?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保存。這樣就不能開多個(gè)webview,否則會(huì)報(bào)out of memory。

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

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

以上所述是小編給大家介紹的Android程序開發(fā)之WebView使用總結(jié),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Flutter 狀態(tài)管理的實(shí)現(xiàn)

    Flutter 狀態(tài)管理的實(shí)現(xiàn)

    這篇文章主要介紹了Flutter 狀態(tài)管理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Android使用Recyclerview實(shí)現(xiàn)圖片水平自動(dòng)循環(huán)滾動(dòng)效果

    Android使用Recyclerview實(shí)現(xiàn)圖片水平自動(dòng)循環(huán)滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android使用Recyclerview實(shí)現(xiàn)圖片水平自動(dòng)循環(huán)滾動(dòng)效果,實(shí)現(xiàn)精彩的跑馬燈效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android SharedPreferences實(shí)現(xiàn)記住密碼和自動(dòng)登錄

    Android SharedPreferences實(shí)現(xiàn)記住密碼和自動(dòng)登錄

    這篇文章主要為大家詳細(xì)介紹了Android SharedPreferences實(shí)現(xiàn)記住密碼和自動(dòng)登錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Android中Viewpager禁止滑動(dòng)的實(shí)現(xiàn)

    Android中Viewpager禁止滑動(dòng)的實(shí)現(xiàn)

    有時(shí)候在開發(fā)中會(huì)遇到一些特別的要求,如在ViewPager中嵌入ListView,或者再嵌入一個(gè)ViewPager,那么在滑動(dòng)的時(shí)候就會(huì)造成被嵌入的XXView不能滑動(dòng)了,那么就把最外層的ViewPager禁止滑動(dòng)吧,本文就介紹了Android中Viewpager禁止滑動(dòng)的實(shí)現(xiàn)方法,需要的朋友可以參考。
    2017-05-05
  • Android實(shí)現(xiàn)帶進(jìn)度條的WebView

    Android實(shí)現(xiàn)帶進(jìn)度條的WebView

    這篇文章主要介紹了Android實(shí)現(xiàn)帶進(jìn)度條的WebView,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Android中SharedPreferences簡(jiǎn)單使用實(shí)例

    Android中SharedPreferences簡(jiǎn)單使用實(shí)例

    這篇文章主要介紹了Android中SharedPreferences簡(jiǎn)單使用案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • android倒計(jì)時(shí)控件示例

    android倒計(jì)時(shí)控件示例

    這篇文章主要為大家詳細(xì)介紹了android倒計(jì)時(shí)控件示例,感興趣的小伙伴們可以參考一下
    2016-03-03
  • android 應(yīng)用退出時(shí)不播放動(dòng)畫的解決方法

    android 應(yīng)用退出時(shí)不播放動(dòng)畫的解決方法

    在Android應(yīng)用中,默認(rèn)情況下,當(dāng)用戶點(diǎn)擊返回按鈕退出應(yīng)用時(shí),系統(tǒng)會(huì)為應(yīng)用添加一個(gè)默認(rèn)的退出動(dòng)畫效果,本文將介紹如何在Android應(yīng)用中禁止退出動(dòng)畫的播放,感興趣的朋友一起看看吧
    2024-05-05
  • android:layout_gravity和android:gravity的區(qū)別

    android:layout_gravity和android:gravity的區(qū)別

    本篇文章主要介紹了android中g(shù)iavity和layout_gravity的區(qū)別。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • Android實(shí)現(xiàn)尋覓紅桃A的翻牌游戲

    Android實(shí)現(xiàn)尋覓紅桃A的翻牌游戲

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)尋覓紅桃A的翻牌游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評(píng)論