每个App都会用到的LoadingLayout(加载中、正在加载、无网络连接等......)
2016-12-01 12:18
776 查看
前言
ps:这个项目我是在看一篇文章的时候收集的,暂时没有实际运行。http://gold.xitu.io/post/583c242061ff4b006b59c7fb
项目里都会遇到几种页面,分别为加载中、无网络、无数据、出错四种情况,经常要使用,所以封成库引用了,方便使用,顺便分享出来。先看一下效果:
原理比较简单,继承FrameLayout,在xml渲染完成后,加上加载中、无网络、无数据、出错四个页面,根据需要控制显示哪一层,花了些时间,开了很多方法出来,支持很多属性的设置,算是比较实用,源码里已对各个方法的作用都加了注释,就不做过多解释了,项目GitHub地址:https://github.com/weavey/LoadingLayoutDemo,感兴趣的可以看看,欢迎指出问题。
使用方式
gradle引用:compile 'com.lai.weavey:loadinglayout:1.2'
使用说明
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); } }[/code]
由于“加载中”的页面,可能每个App都不一样,因此,LoadingLayout支持自定义LoadingPage,如下:
LoadingLayout.getConfig() .setLoadingPageLayout(R.layout.define_loading_page);[/code]
同时,为了适应个别界面的“特殊需求”,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("点我重新加载哦"); //等等[/code]
为ReloadButton设置监听:
loadingLayout.setOnReloadListener(new LoadingLayout.OnReloadListener() { @Override public void onReload(View v) { } });[/code]
设置显示的页面:
loadingLayout.setStatus(LoadingLayout.Loading);//加载中 loadingLayout.setStatus(LoadingLayout.Empty);//无数据 loadingLayout.setStatus(LoadingLayout.Error);//错误 loadingLayout.setStatus(LoadingLayout.No_Network);//无网络 loadingLayout.setStatus(LoadingLayout.Success);//加载成功[/code]
最后,在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>[/code]
注意:
(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,预览布局。
相关文章推荐
- 每个App都会用到的LoadingLayout(加载中、正在加载、无网络连接等......)
- 每个 App 都会用到的 LoadingLayout
- 直接拿去用!每个App都会用到的LoadingLayout
- 每个APP都会用到的LoadingLayout
- 让 iPhone App 以 https 方式连接网络
- 很好的正在加载提示的代码(源于网络)
- easyui 使用loading"正在加载..." 风格的加载提示信息
- IOS系统中网络等待的Loading的实现方法 等待加载
- Android App 启动时显示正在加载图片(源码)
- Android App 启动时显示正在加载图片(源码)
- 在iOS中UILabel作为一个文本标签,在实现程序中几乎每个页面都会用到UILabel,UILabel的常用属性:textColor(文本颜色),text(文本值),font(文本字体),textA
- XP系统 mscorsvw.exe进程 占CPU资源 开机加载网络连接很慢 解决方法
- 增加、编辑、删除等功能,几乎每个系统都会用到,针对这几个方面,写如下测试用例
- 网络图片异步加载(用到多线程(线程池),java回调机制,图片缓存,图片的动画)
- Win8 app判断网络连接状态
- souapp:图片加载loading自动生成
- 【xinfanqie】解决网络出现“正在连接”的问题
- eclipse无法加载Layout(Eclipse is loading framework information and the layout library from the SDK fold)
- 网络共享别人的打印机,能连接,但出现未能打开,正在重试