StatusView:简单的 Android 页面多状态布局切换控件
一、效果预览
二、主要功能
- 可在 Activity、Fragment 、XML 中使用,可作用于 XML 的根布局 View 或其子 View
- 默认支持 Loading、Empty、Error 三种状态布局,可进行常规配置
- 可自定义状态布局,并提供对应接口来完成需要的配置
- 状态布局懒加载,仅在初次显示时初始化
三、使用
1、添加依赖
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
implementation 'com.github.SheHuan:StatusView:1.0.5'
}
2、初始化
可以直接在 XML 中初始化:
<com.shehuan.statusview.StatusView
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--your layout-->
</com.shehuan.library.StatusView>
也可以在 Activity、Fragment中初始化:
// 作用于 Activity 根布局 View
statusView = StatusView.init(Activity activity);
// 作用于 Activity 布局文件中指定的 View
statusView = StatusView.init(Activity activity, @IdRes int viewId);
// 作用于 Fragment 布局文件中指定的 View
statusView = StatusView.init(Fragment fragment, @IdRes int viewId);
注意事项:
- 当 Fragment 布局文件的根 View 使用 StatusView 时,为避免出现的异常问题,建议在 XML 中初始化!
- 当直接在 Fragment 中使用时,
init()
方法需要在onCreateView()
之后的生命周期方法中执行!
3、配置
如果使用默认的状态布局,可以通过如下方式配置布局:
statusView.config(new StatusViewBuilder.Builder()
.setLoadingTip() // loading 提示信息
.setEmptyip() // empty 提示信息
.setErrorTip() // error 提示信息
.setTipColor() // 提示信息颜色
.setTipSize() // 提示信息字体大小
.setEmptyIcon() // empty 图标
.setErrorIcon() // error 图标
.showEmptyRetry() // 是否显示 empty 重试按钮
.showErrorRetry() // 是否显示 error 重试按钮
.setEmptyRetryText() // empty 重试按钮文字
.setErrorRetryText() // error 重试按钮文字
.setRetryColor() // 重试按钮文字颜色
.setRetrySize() // 重试按钮字体大小
.setRetryDrawable() // 重试按钮 drawable 背景
.setOnEmptyRetryClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// empty 重试按钮点击事件
}
})
.setOnErrorRetryClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// error 重试按钮点击事件
}
})
.build());
如果需要使用自定义状态布局,可以通过如下方式设置:
statusView.setLoadingView(@LayoutRes int layoutId);
statusView.setEmptyView(@LayoutRes int layoutId);
statusView.setErrorView(@LayoutRes int layoutId);
或者在 XML 通过自定义属性配置,自定义属性的声明如下
<declare-styleable name="StatusView">
<attr name="sv_loading_view" format="reference" />
<attr name="sv_empty_view" format="reference" />
<attr name="sv_error_view" format="reference" />
</declare-styleable>
使用自定义状态布局时,如果需要进行一些配置可通过statusView.setOnXXXViewConvertListener()
系列方法来完成,例如:
statusView.setOnErrorViewConvertListener(new StatusViewConvertListener() {
@Override
public void onConvert(ViewHolder viewHolder) {
}
});
4、切换状态布局
statusView.showLoadingView();
statusView.showEmptyView();
statusView.showErrorView();
statusView.showContentView(); // 即原始的页面内容布局
5、更自由的用法
如果不想局限于 Loading、Empty、Error 三种状态,那么下面的用法会更适合你:
// 添加指定索引对应的状态布局
statusView.setStatusView(int index, @LayoutRes int layoutId)
// 为指定索引的状态布局设置初次显示的监听事件,用来进行状态布局的相关初始化
statusView.setOnStatusViewConvertListener(int index, StatusViewConvertListener listener)
// 显示指定索引的状态布局
statusView.showStatusView(int index)
更多使用细节可参考demo!