Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

StateLayout提供了便捷的异常页面添加和展示方法,可以灵活地设置异常页面的响应时间。将不同的异常页面分拆到不同的布局文件中,便于后期的管理和复用。

License

Notifications You must be signed in to change notification settings

liwshuo/StateLayout

Repository files navigation

便捷的状态切换控件

在平时的业务开发中,经常会遇到需要在页面中展示异常状态的要求。比如刚进入页面的时候需要有一个展示加载动画的页面;页面刷新失败,需要有一个点击重试的错误页面展示;页面刷新没有数据,需要有一个提示没有数据的错误页面展示。

遇到这些情况,可能会使用一个或者多个布局来根据状态控制其展示和隐藏。这样在布局文件中,就会include多个异常状态的布局文件;在Java代码中,也会保存多个View实例以便控制其显示状态。这种写法略显不便和臃肿。为了解决这个问题,可以使用StateLayout

引用方法

gradle文件中添加: implementation 'com.baymax.statelayout:statelayout:1.0.0'

添加异常页面

StateLayout可以非常便捷地添加异常页面、控制异常页面的展示。其默认提供了5种状态可供使用,已经覆盖了大多数的使用场景。

  • Content,展示内容页面。
  • Empty,展示空页面。
  • Error,展示错误、重试页面。
  • Loading,展示加载页面。
  • Offline,展示无网络页面。

添加页面的方式有两种,一种是通过XML添加。

<com.baymax.statelayout.StateLayout
 android:id="@+id/state_layout"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 app:contentSrc="@layout/main_content_src"
 app:emptySrc="@layout/main_empty_src"
 app:errorSrc="@layout/main_error_src"
 app:loadingSrc="@layout/main_loading_src"
 app:offlineSrc="@layout/main_offline_src"/>

另外一种是通过Java代码添加。如果有需要想直接添加一个View,也可以使用setXXView()相关方法。

stateLayout.setContentViewSrc(R.layout.main_content_src);
stateLayout.setEmptyViewSrc(R.layout.main_empty_src);
stateLayout.setErrorViewSrc(R.layout.main_error_src);
stateLayout.setLoadingViewSrc(R.layout.main_loading_src);
stateLayout.setOfflineViewSrc(R.layout.main_offline_src);

除了以上5种异常状态,StateLayout还提供了自定义状态的添加。不同于内置状态,自定义状态只能够通过Java代码添加。setCustomViewSrc()方法接收两个参数。

  • 第一个是String类型的参数,标识状态的名称;
  • 第二个是布局文件的Id 如果有需要想直接添加一个View,也可以使用setCustomView()方法。
stateLayout.setCustomViewSrc(STATE_CUSTOM1, R.layout.main_custom1_src);
stateLayout.setCustomViewSrc(STATE_CUSTOM2, R.layout.main_custom2_src);

添加点击事件

有些情况下,某些异常状态的页面需要响应点击事件。比如展示了错误页面,可能希望点击错误页面进行重试。StateLayout提供了一个回调接口OnStateClickListener

可以将所有的点击事件响应写到同一个Listener中,通过回调中的state变量来区分不同的点击事件。

public class MainActivity extends AppCompatActivity implements StateLayout.OnStateClickListener {
 ...
 @Override
 protected void onCreate(Bundle savedInstanceState) {
		 ...
 stateLayout.setErrorClickListener(this);
 stateLayout.setEmptyClickListener(this);
 stateLayout.setCustomStateListener(STATE_CUSTOM1, this);
 stateLayout.setCustomStateListener(STATE_CUSTOM2, this);
 }
 ...
 @Override
 public void onClick(View v, String state) {
 switch (state) {
 case StateLayout.EMPTY:
 case StateLayout.ERROR:
 case STATE_CUSTOM1:
 case STATE_CUSTOM2:
 stateLayout.showLoading();
 break;
 default:
 }
 }
}

也可以为每一个状态设置一个Listener,这样就不需要判断状态。

stateLayout.setEmptyClickListener(new StateLayout.OnStateClickListener() {
 @Override
 public void onClick(View v, String state) {
 stateLayout.showLoading();
 }
});

总结

StateLayout提供了便捷的异常页面添加和展示方法,可以灵活地设置异常页面的响应时间。将不同的异常页面分拆到不同的布局文件中,便于后期的管理和复用。

感谢

灵感来自于Android-StatefullLayout)

About

StateLayout提供了便捷的异常页面添加和展示方法,可以灵活地设置异常页面的响应时间。将不同的异常页面分拆到不同的布局文件中,便于后期的管理和复用。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /