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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

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

1、關于WebView的使用:

與JS交互

撥打電話、發送短信、發送郵件

上傳圖片(版本兼容)

進度條設置

字體大小設置

返回網頁上一層、顯示網頁標題

全屏播放網絡視頻

首頁

2、文章說明

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

3、項目地址

4、內容詳細介紹

4.1 電話短信郵件

電話短信郵件&與JS交互測試.png

給WebView設置WebViewClient:

webView.setWebViewClient(new MyWebViewClient(this));

其中MyWebViewClient內容:

/**

* 監聽網頁鏈接:

* - 優酷視頻直接跳到自帶瀏覽器

* - 根據標識:打電話、發短信、發郵件

* - 進度條的顯示

* - 加載完成后,添加javascript監聽

*/

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) {

// 優酷視頻跳轉瀏覽器播放

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加載完成之后,添加監聽圖片的點擊js函數

iWebPageView.addImageClickListener();

super.onPageFinished(view, url);

}

// 視頻全屏播放按返回頁面被放大的問題

@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)); //異常放大,縮回去。

}

}

}

因為有很多配置,這里把各個功能模塊通過接口IWebPageView分離了出來,這樣邏輯更清晰。

4.2 與JS交互

相信大家已經看到了上面"----點擊了圖片"的Toast,這里需要先給WebView設置JavascriptInterface:

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

其中ImageClickInterface相關代碼:

public class ImageClickInterface {

private Context context;

public ImageClickInterface(Context context) {

this.context = context;

}

@JavascriptInterface

public void imageClick(String imgUrl, String hasLink) {

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

// 查看大圖

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

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

// context.startActivity(intent);

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

}

}

加入監聽:

public void addImageClickListener() {

// 這段js函數的功能就是,遍歷所有的img節點,

// 并添加onclick函數,函數的功能是在圖片點擊的時候調用本地java接口并傳遞對應src和has_link里的值過去

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\"));}" +

"}" +

"})()");

}

我們來看一下網頁對應的源碼:

大家可能覺得有點怪異..因為這是保存的本地網頁,如是線上的話,是這樣:

這里傳遞過去的是一個圖片url的值,沒有的屬性傳過去的則是null。這樣我們就可以對其進行具體的操作了。

4.3 字體大小設置

/** 設置字體默認縮放大小(改變網頁字體大小,setTextSize api14被棄用)*/

ws.setTextZoom(100);

其中100為默認縮放比,通過設置縮放比來控制字體大小。

4.4 上傳圖片(版本兼容) & 全屏播放網絡視頻 & 顯示網頁標題

這里因為篇幅原因,里面的代碼很多,就不貼出來了,大家可以點擊MyWebChromeClient.java,查看具體代碼。

上傳圖片.png

4.5 返回網頁上一層

返回網頁上一層及退出全屏等操作:

@Overridepublic

boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

//全屏播放退出全屏

if (webChromeClient.inCustomView()) {

hideCustomView();

return true;

//返回網頁上一頁

} else if (webView.canGoBack()) {

webView.goBack();

return true;

//退出網頁

} else {

webView.loadUrl("about:blank");

finish();

}

}

return false;

}

4.6 進度條設置

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

// 進度條 假裝加載到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、推薦閱讀

如很多細節不知緣由的查看這里

6、所遇問題

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

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

onDestroy時的清除資源操作

End

最后再附一遍項目地址😆:

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。