StatusUI
项目地址: cowthan/StatusUI

简介:界面状态和 UI 切换,如 loading, empty, server error 等,非侵入式组件,状态和 UI 都是可以配置的,也有内置的通用 Status 和默认 UI
demo:
=============================
截图:
==============================
1 这是什么?-
此乃何物
- 一个页面从开始请求数据到请求有了结果之后,有多种状态 UI 切换
- 这个小 library 就是让你方便的控制这些状态的显示样式,显示和隐藏
- 并且所有状态和 UI 都是可配置的
- 并且不侵入你原始的布局,完全以组件的形式提供
- 并且要求低,只要求你的 content view 外面包一层 FrameLayout
- 并且使用简单,你只需要定义自己的 status 和显示样式,并且还内置了几个常见的状态和布局
public class DefaultStatus { public static final String STATUS_LOADING = "loading"; public static final String STATUS_EMPTY = "empty"; public static final String STATUS_NETOFF = "netoff"; public static final String STATUS_SERVER_ERROR = "server-error"; public static final String STATUS_LOGIC_FAIL = "logic-fail"; public static final String STATUS_lOCAL_ERROR = "local-error"; } 反正就是个字符串常量,你在哪儿都可以自己定义2 给各个状态配置不同 UI,对应默认状态的 UI 都在 DefaultStatusProvider
//STATUS_LOADING:正在加载 DefaultStatusProvider.DefaultLoadingStatusView ///STATUS_EMPTY:数据为空,一般用在列表页 DefaultStatusProvider.DefaultEmptyStatusView //STATUS_NETOFF:没网了 DefaultStatusProvider.DefaultNetOffStatusView //STATUS_SERVER_ERROR: 服务器出问题了,生产环境是可能出这个问题的 DefaultStatusProvider.DefaultServerErrorStatusView //STATUS_LOGIC_FAIL:请求本身没有问题,但业务逻辑有问题,例如注册用户时,用户名重复,一般都会带个业务 code DefaultStatusProvider.DefaultLogicFailStatusView //STATUS_lOCAL_ERROR:请求本身没有问题,但处理数据时出异常了,虽然是手机端代码的问题,但大多数是服务器 json 给的不规范 DefaultStatusProvider.DefaultLocalErrorStatusView
StatusProvider 到底怎么回事?
StatusProvider(Context context, String status, View contentView, OnStatusViewCreateCallback callback) 意思就是状态提供者,名字取的不太合适,应该是状态 UI 提供者 参数 2:对应哪个 status 参数 3:内容 View,即正常数据的 View,必须包在一个 FrameLayout 里 参数 3:callback,状态 UI 初始化之后,可以做一些样式设置,事件设置等3 控制显示状态 UI 和内容 UI
statusUIManager.show(String status) //显示对应状态 UI statusUIManager.clearStatus() //显示内容 UI statusUIManager 里其实是一个 map,存储了所有你设置的 StatusProvider
一般代码如下: private void initStatusUI(){ statusUIManager = new StatusUIManager(); statusUIManager.addStatusProvider( new DefaultStatusProvider.DefaultLoadingStatusView( getActivity(), DefaultStatus.STATUS_LOADING, content, new StatusProvider.OnStatusViewCreateCallback() { @Override public void onCreate(int status, View statusView) { } })); statusUIManager.addStatusProvider( new DefaultStatusProvider.DefaultEmptyStatusView(getActivity(), DefaultStatus.STATUS_EMPTY, content, new StatusProvider.OnStatusViewCreateCallback() { @Override public void onCreate(int status, View statusView) { } })); statusUIManager.addStatusProvider(D new DefaultStatusProvider.DefaultServerErrorStatusView( getActivity(), DefaultStatus.STATUS_SERVER_ERROR, content, new StatusProvider.OnStatusViewCreateCallback() { @Override public void onCreate(int status, View statusView) { } })); statusUIManager.addStatusProvider( new DefaultStatusProvider.DefaultLogicFailStatusView(getActivity(), DefaultStatus.STATUS_LOGIC_FAIL, content, new StatusProvider.OnStatusViewCreateCallback() { @Override public void onCreate(int status, View statusView) { } })); statusUIManager.addStatusProvider( new DefaultStatusProvider.DefaultNetOffStatusView( getActivity(), DefaultStatus.STATUS_NETOFF, content, new StatusProvider.OnStatusViewCreateCallback() { @Override public void onCreate(int status, View statusView) { } })); statusUIManager.addStatusProvider( new DefaultStatusProvider.DefaultLocalErrorStatusView( getActivity(), DefaultStatus.STATUS_lOCAL_ERROR, content, new StatusProvider.OnStatusViewCreateCallback() { @Override public void onCreate(int status, View statusView) { } }));