我们用webView去请求一个网页链接的时候,如果请求网页失败或无网络的情况下,它会返回给我们这样一个页面,如下图所示:
上面这个页面就是系统自带的页面,你觉得是不是很丑?反正小编本人觉得非常丑,很难看,于是乎小编就在想能不能自定义一个页面,当数据请求失败时让系统来加载我们自定义好的页面?上网查了很多资料,都没有关于这个问题的解决方法(反正我是没有找到),经过小编的不断琢磨,今天终于实现了这个功能。以下就是本人自定义实现的数据加载失败时的页面:
这样看起来是不是觉得很高大尚。这和我们真正拿到数据接口做出来的效果完全一样。对于用户来说这样的体验也是很完美的。
**全部代码:
一、主代码:**
MainActivity.Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
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属性,能够执行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
;
}
/****
* 把系统自身请求失败时的网页隐藏
*/
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
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<?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加载网页失败时的页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
原文链接:http://blog.csdn.net/vampire2777/article/details/54645835