网络请求状态LoadingLayout的使用记录
2018-01-30 本文已影响0人
smallestt
项目里都会遇到几种页面,分别为加载中、无网络、无数据、出错四种情况,经常要使用,效果图如下:
WX20180130-151920.png
WX20180130-151942.png
实现方式:
-
build.gradle添加依赖
compile 'com.lai.weavey:loadinglayout:1.3.1'
-
application里进行基础配置
LoadingLayout.getConfig()
.setErrorText("出错啦~请稍后重试!")
.setEmptyText("抱歉,暂无数据")
.setNoNetworkText("无网络连接,请检查您的网络···")
.setErrorImage(R.mipmap.bg_def_photo)
.setEmptyImage(R.mipmap.bg_def_photo)
.setNoNetworkImage(R.mipmap.pic_xnd_wuwangluo)
.setAllTipTextColor(R.color.c666666)
.setAllTipTextSize(12)
.setReloadButtonText("点击重新加载")
.setReloadButtonTextSize(14)
.setReloadButtonTextColor(R.color.c999999)
.setLoadingPageLayout(R.layout.view_progress_bar)//自定义加载中界面
.setAllPageBackgroundColor(R.color.c00000000)
.setReloadButtonWidthAndHeight(120, 40);
由于“加载中”的页面,可能每个App都不一样,因此LoadingLayout支持自定义LoadingPage,如下:
LoadingLayout.getConfig() .setLoadingPageLayout(R.layout.define_loading_page);
为了适应个别界面的特殊需求,LoadingLayout也支持局部设置属性,仅对当前对象生效,不影响全局,如下:
LoadingLayout loading = (LoadingLayout) findViewById(R.id.loading_layout);
loading.setLoadingPage(R.layout.define_loading_page)
.setEmptyText("暂无报告数据")
.setErrorText("")
.setNoNetworkText("")
.setErrorImage(R.mipmap.ic_launcher)
.setErrorTextSize(16)
.setReloadButtonText("点我重新加载哦"); //等等
- 为ReloadButton设置监听
loadingLayout.setOnReloadListener(new LoadingLayout.OnReloadListener() {
@Override
public void onReload(View v) {
}
});
- 设置显示的方法:
loadingLayout.setStatus(LoadingLayout.Loading);//加载中
loadingLayout.setStatus(LoadingLayout.Empty);//无数据
loadingLayout.setStatus(LoadingLayout.Error);//错误
loadingLayout.setStatus(LoadingLayout.No_Network);//无网络
loadingLayout.setStatus(LoadingLayout.Success);//加载成功
- xml布局:最外层布局套上LoadingLayout
<com.weavey.loading.lib.LoadingLayout
android:id="@+id/loading"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:isFirstVisible="false">
//
</com.weavey.loading.lib.LoadingLayout>
- 注意
1.isFirstVisible属性用来控制contentView一开始是否隐藏,由于LoadingLayout原理是在xml渲染完成后在contentView上铺上三层View,因此,一开始如果不隐藏,等contentView渲染完成后调用: loadingLayout.setStatus(LoadingLayout.Loading);
会造成界面闪烁的效果,影响体验,因此默认将contentView隐藏,所以数据加载完成后一定要调用loadingLayout.setStatus(LoadingLayout.Success);,将contentView显示出来。这样也能解决未获取到数据的情况下,被用户看到杂乱无章的布局,个人还是比较喜欢默认隐藏contentView;
2.为了方便管理,LoadingLayout只能有一个直属子View,类似ScrollView,添加两个直属子View会抛出异常throw new IllegalStateException("LoadingLayout can host only one direct child");;
3.由于AS会直接将自定义View的特性反应在预览界面,所以在使用LoadingLayout的时候,会无法看到被LoadingLayout包裹住的布局(默认为gone),因此也可以将isFirstVisible属性暂时设为true,预览布局。