最新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全方面的使用(项目应用篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有大神知道鼻子两侧发红是怎么回事么?求助
- 下一篇: 在华胜做奥迪全车喷漆一般要多久?