Android中替換WebView加載網頁失敗時的頁面
我們用webView去請求一個網頁鏈接的時候,如果請求網頁失敗或無網絡的情況下,它會返回給我們這樣一個頁面,如下圖所示:
上面這個頁面就是系統(tǒng)自帶的頁面,你覺得是不是很丑?反正小編本人覺得非常丑,很難看,于是乎小編就在想能不能自定義一個頁面,當數據請求失敗時讓系統(tǒng)來加載我們自定義好的頁面?上網查了很多資料,都沒有關于這個問題的解決方法(反正我是沒有找到),經過小編的不斷琢磨,今天終于實現了這個功能。以下就是本人自定義實現的數據加載失敗時的頁面:
這樣看起來是不是覺得很高大尚。這和我們真正拿到數據接口做出來的效果完全一樣。對于用戶來說這樣的體驗也是很完美的。
**全部代碼:
一、主代碼:**
MainActivity.Java
package com.example.webview; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.LinearLayout; import android.widget.RelativeLayout; public class MainActivity extends AppCompatActivity { private WebView webview; private WebSettings mWebSettings; private View mErrorView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = (WebView) findViewById(R.id.main_webview); setUpView(); } private void setUpView() { //加載需要顯示的網頁 webview.loadUrl("http://www.baidu.com/"); //設置WebView屬性,能夠執(zhí)行Javascript腳本 webview.getSettings().setJavaScriptEnabled(true); mWebSettings = webview.getSettings(); mWebSettings.setJavaScriptEnabled(true); //允許加載javascript mWebSettings.setSupportZoom(true); //允許縮放 mWebSettings.setBuiltInZoomControls(true); //原網頁基礎上縮放 mWebSettings.setUseWideViewPort(true); //任意比例縮放 webview.setWebViewClient(webClient); //設置Web視圖 } /*** * 設置Web視圖的方法 */ WebViewClient webClient = new WebViewClient(){//處理網頁加載失敗時 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { showErrorPage();//顯示錯誤頁面 }; }; boolean mIsErrorPage; protected void showErrorPage() { LinearLayout webParentView = (LinearLayout)webview.getParent(); initErrorPage();//初始化自定義頁面 while (webParentView.getChildCount() > 1) { webParentView.removeViewAt(0); } @SuppressWarnings("deprecation") LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewPager.LayoutParams.FILL_PARENT, ViewPager.LayoutParams.FILL_PARENT); webParentView.addView(mErrorView, 0, lp); mIsErrorPage = true; } /**** * 把系統(tǒng)自身請求失敗時的網頁隱藏 */ protected void hideErrorPage() { LinearLayout webParentView = (LinearLayout)webview.getParent(); mIsErrorPage = false; while (webParentView.getChildCount() > 1) { webParentView.removeViewAt(0); } } /*** * 顯示加載失敗時自定義的網頁 */ protected void initErrorPage() { if (mErrorView == null) { mErrorView = View.inflate(this, R.layout.activity_error, null); RelativeLayout layout = (RelativeLayout)mErrorView.findViewById(R.id.online_error_btn_retry); layout.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { webview.reload(); } }); mErrorView.setOnClickListener(null); } } }
二、XML布局代碼:
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.webview.MainActivity"> <WebView android:id="@+id/main_webview" android:layout_width="match_parent" android:layout_height="match_parent"> </WebView> </LinearLayout>
2.activity_error.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/online_error_btn_retry" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#E6E6E6" android:clickable="true" android:gravity="center" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <ImageView android:layout_width="70dp" android:layout_height="70dp" android:src="@drawable/wifi" android:id="@+id/imageView2" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18dp" android:text="數據獲取失敗" ></TextView> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="15dp" android:text="請檢查網絡后,點擊重新加載" /> </LinearLayout> </RelativeLayout> </LinearLayout>
以上所述是小編給大家介紹的Android中替換WebView加載網頁失敗時的頁面,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
相關文章
Android打開GPS導航并獲取位置信息返回null解決方案
最近在做一個 Android 項目,需要用到GPS獲取位置信息,從 API 查了一下,發(fā)現獲取位置信息僅需極其簡單的一句即可getLastKnownLocation(LocationManager.GPS_PROVIDER)郁悶的是一直為null,于是搜集整理下,曬出來與大家分享2013-01-01Android kotlin使用注解實現防按鈕連點功能的示例
這篇文章主要介紹了Android kotlin使用注解實現防按鈕連點功能的示例,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下2021-03-03Android開發(fā)之微信底部菜單欄實現的幾種方法匯總
這篇文章主要介紹了Android開發(fā)之微信底部菜單欄實現的幾種方法,下面小編把每種方法通過實例逐一給大家介紹,需要的朋友可以參考下2016-09-09Android使用AlertDialog創(chuàng)建對話框
這篇文章主要為大家詳細介紹了Android使用AlertDialog創(chuàng)建對話框的方法料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12