日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

最新android webview,Android 关于WebView全方面的使用(项目应用篇)

發(fā)布時(shí)間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最新android webview,Android 关于WebView全方面的使用(项目应用篇) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、關(guān)于WebView的使用:

與JS交互

撥打電話、發(fā)送短信、發(fā)送郵件

上傳圖片(版本兼容)

進(jìn)度條設(shè)置

字體大小設(shè)置

返回網(wǎng)頁(yè)上一層、顯示網(wǎng)頁(yè)標(biāo)題

全屏播放網(wǎng)絡(luò)視頻

首頁(yè)

2、文章說(shuō)明

WebView的使用已經(jīng)是老生常談了,看到很多文章說(shuō)了用法,但我很少看到全的或者是項(xiàng)目中可以直接使用的,都是看了很多后,自己把功能都集合在一起。這里是一份比較全面的WebView項(xiàng)目應(yīng)用篇,其中已經(jīng)解決了應(yīng)用時(shí)出現(xiàn)的很多bug,希望能對(duì)大家有幫助。

3、項(xiàng)目地址

4、內(nèi)容詳細(xì)介紹

4.1 電話短信郵件

電話短信郵件&與JS交互測(cè)試.png

給WebView設(shè)置WebViewClient:

webView.setWebViewClient(new MyWebViewClient(this));

其中MyWebViewClient內(nèi)容:

/**

* 監(jiān)聽(tīng)網(wǎng)頁(yè)鏈接:

* - 優(yōu)酷視頻直接跳到自帶瀏覽器

* - 根據(jù)標(biāo)識(shí):打電話、發(fā)短信、發(fā)郵件

* - 進(jìn)度條的顯示

* - 加載完成后,添加javascript監(jiān)聽(tīng)

*/

public class MyWebViewClient extends WebViewClient {

private IWebPageView iWebPageView;

private WebViewActivity activity;

public MyWebViewClient(IWebPageView iWebPageView) {

this.iWebPageView = iWebPageView;

activity = (WebViewActivity) iWebPageView;

}

@SuppressWarnings("deprecation")

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

// 優(yōu)酷視頻跳轉(zhuǎn)瀏覽器播放

if (url.startsWith("http://v.youku.com/")) {

Intent intent = new Intent();

intent.setAction("android.intent.action.VIEW");

intent.addCategory("android.intent.category.DEFAULT");

intent.addCategory("android.intent.category.BROWSABLE");

Uri content_url = Uri.parse(url);

intent.setData(content_url);

activity.startActivity(intent);

return true;

// 電話、短信、郵箱

} else if (url.startsWith(WebView.SCHEME_TEL) || url.startsWith("sms:") || url.startsWith(WebView.SCHEME_MAILTO)) {

try {

Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse(url));

activity.startActivity(intent);

} catch (ActivityNotFoundException ignored) {

}

return true;

}

iWebPageView.startProgress();

view.loadUrl(url);

return false;

}

@Override

public void onPageFinished(WebView view, String url) {

if (activity.progress90) {

iWebPageView.hindProgressBar();

} else {

activity.pageFinish = true;

}

if (!CheckNetwork.isNetworkConnected(activity)) {

iWebPageView.hindProgressBar();

}

// html加載完成之后,添加監(jiān)聽(tīng)圖片的點(diǎn)擊js函數(shù)

iWebPageView.addImageClickListener();

super.onPageFinished(view, url);

}

// 視頻全屏播放按返回頁(yè)面被放大的問(wèn)題

@Override

public void onScaleChanged(WebView view, float oldScale, float newScale) {

super.onScaleChanged(view, oldScale, newScale);

if(newScale - oldScale > 7) {

view.setInitialScale((int)(oldScale / newScale * 100)); //異常放大,縮回去。

}

}

}

因?yàn)橛泻芏嗯渲?#xff0c;這里把各個(gè)功能模塊通過(guò)接口IWebPageView分離了出來(lái),這樣邏輯更清晰。

4.2 與JS交互

相信大家已經(jīng)看到了上面"----點(diǎn)擊了圖片"的Toast,這里需要先給WebView設(shè)置JavascriptInterface:

webView.addJavascriptInterface(new ImageClickInterface(this), "injectedObject");

其中ImageClickInterface相關(guān)代碼:

public class ImageClickInterface {

private Context context;

public ImageClickInterface(Context context) {

this.context = context;

}

@JavascriptInterface

public void imageClick(String imgUrl, String hasLink) {

Toast.makeText(context, "----點(diǎn)擊了圖片", Toast.LENGTH_SHORT).show();

// 查看大圖

// Intent intent = new Intent(context, ViewBigImageActivity.class);

// intent.putStringArrayListExtra("imgUrl",imgUrl);

// context.startActivity(intent);

// Log.e("----點(diǎn)擊了圖片 url: ", "" + imgUrl);

}

}

加入監(jiān)聽(tīng):

public void addImageClickListener() {

// 這段js函數(shù)的功能就是,遍歷所有的img節(jié)點(diǎn),

// 并添加onclick函數(shù),函數(shù)的功能是在圖片點(diǎn)擊的時(shí)候調(diào)用本地java接口并傳遞對(duì)應(yīng)src和has_link里的值過(guò)去

webView.loadUrl("javascript:(function(){" +

"var objs = document.getElementsByTagName(\"img\");" +

"for(var i=0;i

"{" +

"objs[i].οnclick=function(){window.injectedObject.imageClick(this.getAttribute(\"src\"),this.getAttribute(\"has_link\"));}" +

"}" +

"})()");

}

我們來(lái)看一下網(wǎng)頁(yè)對(duì)應(yīng)的源碼:

大家可能覺(jué)得有點(diǎn)怪異..因?yàn)檫@是保存的本地網(wǎng)頁(yè),如是線上的話,是這樣:

這里傳遞過(guò)去的是一個(gè)圖片url的值,沒(méi)有的屬性傳過(guò)去的則是null。這樣我們就可以對(duì)其進(jìn)行具體的操作了。

4.3 字體大小設(shè)置

/** 設(shè)置字體默認(rèn)縮放大小(改變網(wǎng)頁(yè)字體大小,setTextSize api14被棄用)*/

ws.setTextZoom(100);

其中100為默認(rèn)縮放比,通過(guò)設(shè)置縮放比來(lái)控制字體大小。

4.4 上傳圖片(版本兼容) & 全屏播放網(wǎng)絡(luò)視頻 & 顯示網(wǎng)頁(yè)標(biāo)題

這里因?yàn)槠?#xff0c;里面的代碼很多,就不貼出來(lái)了,大家可以點(diǎn)擊MyWebChromeClient.java,查看具體代碼。

上傳圖片.png

4.5 返回網(wǎng)頁(yè)上一層

返回網(wǎng)頁(yè)上一層及退出全屏等操作:

@Overridepublic

boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

//全屏播放退出全屏

if (webChromeClient.inCustomView()) {

hideCustomView();

return true;

//返回網(wǎng)頁(yè)上一頁(yè)

} else if (webView.canGoBack()) {

webView.goBack();

return true;

//退出網(wǎng)頁(yè)

} else {

webView.loadUrl("about:blank");

finish();

}

}

return false;

}

4.6 進(jìn)度條設(shè)置

這里用的是先加載到90%再加載到100%, 具體為什么相信大家都懂吧...

// 進(jìn)度條 假裝加載到90%

public void startProgress90() {

for (int i = 0; i < 900; i++) {

final int progress = i + 1;

mProgressBar.postDelayed(new Runnable() {

@Override

public void run() {

mProgressBar.setProgress(progress);

if (progress == 900) {

progress90 = true;

if (pageFinish) {

startProgress90to100();

}

}

}

}, (i + 1) * 2);

}

}

再加載到100%:

// 加載到90%后再加載到100%

public void progressChanged(int newProgress) {

if (progress90) {

int progress = newProgress * 100;

if (progress > 900) {

mProgressBar.setProgress(progress);

if (progress == 1000) {

mProgressBar.setVisibility(View.GONE);

}

}

}

}

5、推薦閱讀

如很多細(xì)節(jié)不知緣由的查看這里

6、所遇問(wèn)題

找不到assets目錄下資源:注意assets在哪層文件夾下!與AndroidManifest.xml同級(jí)

視頻播放寬度比webview設(shè)置的寬度大,超過(guò)屏幕:設(shè)置ws.setLoadWithOverviewMode(false);

onDestroy時(shí)的清除資源操作

End

最后再附一遍項(xiàng)目地址😆:

總結(jié)

以上是生活随笔為你收集整理的最新android webview,Android 关于WebView全方面的使用(项目应用篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。