发现了一个挺好用的LoadingLayout,网络错误,无数据,动态显示!

原创 2017年01月22日 14:43:06

前言

项目里都会遇到几种页面,分别为加载中、无网络、无数据、出错四种情况,经常要使用,所以封成库引用了,方便使用,顺便分享出来。先看一下效果:

原理比较简单,继承FrameLayout,在xml渲染完成后,加上加载中、无网络、无数据、出错四个页面,根据需要控制显示哪一层,花了些时间,开了很多方法出来,支持很多属性的设置,算是比较实用,源码里已对各个方法的作用都加了注释,就不做过多解释了,项目GitHub地址:https://github.com/weavey/LoadingLayoutDemo,感兴趣的可以看看,欢迎指出问题。
使用方式

gradle引用:

compile 'com.lai.weavey:loadinglayout:1.3.1'

使用说明

LoadingLayout支持全局配置,对所有使用到的地方都起效,需要在Application中配置,如下:

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        LoadingLayout.getConfig()
                .setErrorText("出错啦~请稍后重试!")
                .setEmptyText("抱歉,暂无数据")
                .setNoNetworkText("无网络连接,请检查您的网络···")
                .setErrorImage(R.mipmap.define_error)
                .setEmptyImage(R.mipmap.define_empty)
                .setNoNetworkImage(R.mipmap.define_nonetwork)
                .setAllTipTextColor(R.color.gray)
                .setAllTipTextSize(14)
                .setReloadButtonText("点我重试哦")
                .setReloadButtonTextSize(14)
                .setReloadButtonTextColor(R.color.gray)
                .setReloadButtonWidthAndHeight(150,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里面使用:

<com.weavey.loading.lib.LoadingLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:isFirstVisible="true">

    <TextView
        android:background="@color/colorPrimary"
        android:visibility="visible"
        android:gravity="center"
        android:textColor="@android:color/white"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="ContentView"/>

</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,预览布局。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android自定义view实现加载中、加载失败、无数据

一、概述Android中经常在有的app中可以见到加载中并不是以弹出对话框的形式显示的,而是占用整个屏幕,如果加载失败就会出现加载失败页面,点击加载失败页面中任意区域,都可以重新加载。今天就和大家一起...
  • chenzheng8975
  • chenzheng8975
  • 2017年02月21日 14:26
  • 2715

UITableView加载数据,没有数据,没有网络界面处理

俗话说的好,傻逼的APP都是相似的,牛逼的APP各有各的牛逼。。。但是UITableView的这个三种状态的默认界面不知道困扰了多少人。。 github上有一个哥们写了一个牛逼的框架:https:/...
  • chmod_R_755
  • chmod_R_755
  • 2016年11月19日 17:06
  • 1950

LoadingLayout封装网络请求的各种效果

继承FrameLayout,在xml渲染完成后,加上加载中、无网络、无数据、出错四个页面,根据需要控制显示哪一层,花了些时间,开了很多方法出来,支持很多属性的设置,算是比较实用,源码里已对各个方法的作...
  • baidu_29601793
  • baidu_29601793
  • 2016年12月03日 22:26
  • 696

使用GridView显示网络图片<一>

目的: 显示多行两列的网格图片列表,图片资源来源于服务器。 思路: 1. 布局组件儿,使用ABSListview的子类,常用的是有Listview GridView,因为要显示多列,所以使用Gr...
  • linchuanzhi_886
  • linchuanzhi_886
  • 2017年03月27日 17:17
  • 367

Android 加载成功、加载失败、加载中、无数据四个不同界面的切换

自定义一个Framelayout来切换布局。 1.首先自定义一个Framelayout,用addview()把加载失败、加载中、无数据添加到Framelayout;因为加载成功的vi...
  • zhaozhuzi
  • zhaozhuzi
  • 2017年06月27日 19:58
  • 1513

[2463]学密码学一定得学程序 (KMP)SDUT

 学密码学一定得学程序 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 曾经,ZY...
  • jiangyongy
  • jiangyongy
  • 2014年08月29日 20:26
  • 573

一个挺好用的数据库操作类

using System; using System.Data; using System.Configuration; using System.Data.SqlClient; using ...
  • hefeng_aspnet
  • hefeng_aspnet
  • 2013年05月05日 17:09
  • 334

一个挺好用的花样开源神器

airbnb/lottie-android Render After Effects animations natively on Android and iOS Lottie is ...
  • sky_pjf
  • sky_pjf
  • 2017年02月05日 18:05
  • 368

2017 浙工业院赛预赛 E 小米买东西【二分+贪心】

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 题目描述 小咪是一个土豪手办狂魔,这次他去了...
  • Irish_Moonshine
  • Irish_Moonshine
  • 2017年12月19日 00:00
  • 221

每个App都会用到的LoadingLayout(加载中、正在加载、无网络连接等......)

前言 ps:这个项目我是在看一篇文章的时候收集的,暂时没有实际运行。 http://gold.xitu.io/post/583c242061ff4b006b59c7fb 项目里都会遇到几...
  • qq_35534596
  • qq_35534596
  • 2016年12月01日 12:18
  • 3035
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:发现了一个挺好用的LoadingLayout,网络错误,无数据,动态显示!
举报原因:
原因补充:

(最多只允许输入30个字)