WebView加载失败或网络异常时,替换WebView的错误界面;
生活随笔
收集整理的這篇文章主要介紹了
WebView加载失败或网络异常时,替换WebView的错误界面;
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
WebView在加載失敗時(shí)會(huì)顯示一個(gè)失敗原因的界面,各個(gè)手機(jī)顯示的界面還都不一樣,部分手機(jī)還會(huì)把Url顯示出來;我們要做的就是統(tǒng)一加載失敗的界面;
大概思路:在WebView這個(gè)控件上面再覆蓋一個(gè)View,監(jiān)聽WebView加載失敗時(shí)把這個(gè)View顯示出來,這樣用戶就看不到原來的WebView的失敗界面了。
監(jiān)聽WebView開始加載、加載完成、加載失敗;
在開始加載時(shí),把自定義失敗的View隱藏,加載失敗時(shí)把這個(gè)View顯示出來;
mWebView.setWebViewClient(new WebViewClient() {//在開始加載網(wǎng)頁(yè)時(shí)會(huì)回調(diào)@Overridepublic void onPageStarted(WebView webView, String s, Bitmap bitmap) {super.onPageStarted(webView, s, bitmap);ivError.setVisibility(View.INVISIBLE);mWebView.setVisibility(View.VISIBLE);}//加載錯(cuò)誤的時(shí)候會(huì)回調(diào)@Overridepublic void onReceivedError(WebView webView, int i, String s, String s1) {super.onReceivedError(webView, i, s, s1);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {return;}ivError.setVisibility(View.VISIBLE);mWebView.setVisibility(View.INVISIBLE);}//加載錯(cuò)誤的時(shí)候會(huì)回調(diào)@Overridepublic void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {super.onReceivedError(webView, webResourceRequest, webResourceError);if (webResourceRequest.isForMainFrame()) {ivError.setVisibility(View.VISIBLE);mWebView.setVisibility(View.INVISIBLE);}}//加載完成的時(shí)候會(huì)回調(diào)@Overridepublic void onPageFinished(WebView webView, String s) {} });點(diǎn)擊加載失敗界面,重新載入這個(gè)網(wǎng)頁(yè);
ivError.setOnClickListener(v -> mWebView.reload());刷新后WebView退出不了,重定向的問題解決;
在setWebViewClient這個(gè)方法中添加:
@Overridepublic boolean shouldOverrideUrlLoading(WebView webView, String url) {WebView.HitTestResult hitTestResult = webView.getHitTestResult();//hitTestResult==null解決重定向問題(刷新后不能退出的bug)if (!TextUtils.isEmpty(url) && hitTestResult == null) {return true;}return super.shouldOverrideUrlLoading(webView, url);}看一下XML布局:
<FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><com.cc.webview.X5WebViewandroid:id="@+id/mWebView"android:layout_width="match_parent"android:layout_height="match_parent" /><ImageViewandroid:id="@+id/ivError"android:layout_width="match_parent"android:layout_height="match_parent"android:src="@mipmap/web_loaderror"android:scaleType="centerCrop"android:visibility="invisible"/></FrameLayout>大概就是這樣,WebView刷新后不能退出這個(gè)問題重寫一下“shouldOverrideUrlLoading”這個(gè)方法就行了;
總結(jié)
以上是生活随笔為你收集整理的WebView加载失败或网络异常时,替换WebView的错误界面;的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 证券交易所--本方最优对手方最优的区别
- 下一篇: 南京 学计算机的学校,南京小学生暑假学计