Android中替換WebView加載網(wǎng)頁失敗時的頁面
我們用webView去請求一個網(wǎng)頁鏈接的時候,如果請求網(wǎng)頁失敗或無網(wǎng)絡的情況下,它會返回給我們這樣一個頁面,如下圖所示:
上面這個頁面就是系統(tǒng)自帶的頁面,你覺得是不是很丑?反正小編本人覺得非常丑,很難看,于是乎小編就在想能不能自定義一個頁面,當數(shù)據(jù)請求失敗時讓系統(tǒng)來加載我們自定義好的頁面?上網(wǎng)查了很多資料,都沒有關(guān)于這個問題的解決方法(反正我是沒有找到),經(jīng)過小編的不斷琢磨,今天終于實現(xiàn)了這個功能。以下就是本人自定義實現(xiàn)的數(shù)據(jù)加載失敗時的頁面:
這樣看起來是不是覺得很高大尚。這和我們真正拿到數(shù)據(jù)接口做出來的效果完全一樣。對于用戶來說這樣的體驗也是很完美的。
**全部代碼:
一、主代碼:**
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() {
//加載需要顯示的網(wǎng)頁
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); //原網(wǎng)頁基礎上縮放
mWebSettings.setUseWideViewPort(true); //任意比例縮放
webview.setWebViewClient(webClient); //設置Web視圖
}
/***
* 設置Web視圖的方法
*/
WebViewClient webClient = new WebViewClient(){//處理網(wǎng)頁加載失敗時
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)自身請求失敗時的網(wǎng)頁隱藏
*/
protected void hideErrorPage() {
LinearLayout webParentView = (LinearLayout)webview.getParent();
mIsErrorPage = false;
while (webParentView.getChildCount() > 1) {
webParentView.removeViewAt(0);
}
}
/***
* 顯示加載失敗時自定義的網(wǎng)頁
*/
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="數(shù)據(jù)獲取失敗"
></TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15dp"
android:text="請檢查網(wǎng)絡后,點擊重新加載"
/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
以上所述是小編給大家介紹的Android中替換WebView加載網(wǎng)頁失敗時的頁面,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android WebView打開網(wǎng)頁一片空白的解決方法
- Android開發(fā)筆記之如何正確獲取WebView的網(wǎng)頁Title
- Android WebView實現(xiàn)網(wǎng)頁滾動截圖
- 詳解android 用webview加載網(wǎng)頁(https和http)
- Android開發(fā)中使用WebView控件瀏覽網(wǎng)頁的方法詳解
- Android編程實現(xiàn)webview將網(wǎng)頁打包成apk的方法
- Android中Webview打開網(wǎng)頁的同時發(fā)送HTTP頭信息方法
- Android webView如何輸出自定義網(wǎng)頁
相關(guān)文章
Android studio開發(fā)小型對話機器人app(實例代碼)
這篇文章主要介紹了Android studio開發(fā)一個小型對話機器人app,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
android中WebView和javascript實現(xiàn)數(shù)據(jù)交互實例
這篇文章主要介紹了android中WebView和javascript實現(xiàn)數(shù)據(jù)交互實例,需要的朋友可以參考下2014-07-07
Android開發(fā)之DialogFragment用法實例總結(jié)
這篇文章主要介紹了Android開發(fā)之DialogFragment用法,結(jié)合實例形式總結(jié)分析了Android使用DialogFragment代替Dialog功能的相關(guān)使用技巧與注意事項,需要的朋友可以參考下2017-11-11

