• Stars
    star
    176
  • Rank 216,987 (Top 5 %)
  • Language
    Kotlin
  • Created about 6 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

一种无侵入,使用简单,无需修改现有布局,动态切换布局状态(Loading/Error/Empty/Content)的解决方案。

StateLayout

Simple way to change your layout state, like loading, empty, error. Strong customizitaion, written by Kotlin.

Feature

  • 对已有布局零侵入,无需修改现有布局
  • 支持对Activity, Fragment, View进行状态切换
  • 支持自定义每种状态的布局
  • 暴露失败状态View点击回调
  • 暂时不支持对ConstraintLayout中的View进行状态切换

ScreenShot

StateLayout StateLayout

Gradle

implementation 'com.github.li-xiaojun:StateLayout:Tag'

别忘了添加根地址:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Usage

对Activity/Fragment使用:

val stateLayout = StateLayout(this)
            .wrap(this)
            .showLoading()

对指定View使用:

val layout2 = StateLayout(this)
            .wrap(view)
            .showLoading()

默认是显示内容布局,改变状态的方法:

stateLayout.showLoading()
stateLayout.showContent() //default state
stateLayout.showError()
stateLayout.showEmpty()

在布局中使用:

<com.lxj.statelayout.StateLayout
            android:id="@+id/slInLayout"
            android:layout_marginBottom="40dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:id="@+id/tvInLayout"
                android:gravity="center"
                android:text="测试布局中使用"
                android:background="#9f00"
                android:textColor="#fff"
                android:textSize="20sp"
                android:layout_width="match_parent"
                android:layout_height="150dp"/>
        </com.lxj.statelayout.StateLayout>

自定义每种状态对应的布局:

StateLayout(this)
    .config(loadingLayoutId = R.layout.custom_loading, //自定义加载中布局
            errorLayoutId = R.layout.custom_error, //自定义加载失败布局
            emptyLayoutId = R.layout.custom_empty, //自定义数据位为空的布局
            useContentBgWhenLoading = true, //加载过程中是否使用内容的背景,默认false
            enableLoadingShadow = true, //加载过程中是否启用半透明阴影盖在内容上面,默认false
            defaultShowLoading = true, //是否初始显示loading状态,默认显示的是Content
            enableTouchWhenLoading = true, //显示loading状态是否允许触摸,默认false
            noEmptyAndError = true, //是否去除Empty和Error状态,有时候只需要一个Loading状态,可以减少内存,默认false
            showLoadingOnce = false, //是否只显示一次Loading,在某些时候需要,默认false
            retryAction = { //点击errorView的回调
                Toast.makeText(this, "点击了重试", Toast.LENGTH_SHORT).show()
            })
    .wrap(view)
    .showLoading()

也可以全局配置,全局配置适用于所有的实例,但会被每个实例自己的配置覆盖:

StateLayoutConfig.init(...)

在Fragment中使用的时候需要注意下,要将StateLayout作为Fragment的View返回:

private var stateLayout: StateLayout? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    if (fragmentView==null) {
        fragmentView = inflater.inflate(getLayoutId(), container, false)
        stateLayout = StateLayout(context!!)
                .wrap(fragmentView)
                .showLoading()
    }
    return stateLayout
}

More Repositories

1

XPopup

🔥XPopup2.0版本重磅来袭,2倍以上性能提升,带来可观的动画性能优化和交互细节的提升!!!功能强大,交互优雅,动画丝滑的通用弹窗!可以替代Dialog,PopupWindow,PopupMenu,BottomSheet,DrawerLayout,Spinner等组件,自带十几种效果良好的动画, 支持完全的UI和动画自定义!(Powerful and Beautiful Popup for Android,can absolutely replace Dialog,PopupWindow,PopupMenu,BottomSheet,DrawerLayout,Spinner. With built-in animators , very easy to custom popup view.)
Java
7,689
star
2

AndroidKTX

🔥Some very useful kotlin extensions for speed android development!好用到爆的Kotlin扩展,加速你的Android开发!
C
770
star
3

XPopupExt

XPopup扩展功能库,基于XPopup强大的弹窗能力和PickerView的选择器逻辑,封装了时间选择器弹窗、城市选择器弹窗和条件选择器。
Java
332
star
4

Matisse

基于知乎Matisse增强,一行代码实现图片/视频选择,裁剪,微信同款视频录制和拍照,无需权限申请!
Java
198
star
5

XRefreshLayout

【已过时,不再更新,请使用更强大的SmartRefreshLayout!】A refresh layout(无侵入下拉刷新和加载布局), can refresh RecyclerView for all LayoutManager, NestedScrollView。
Java
127
star
6

ShootPlane

微信打飞机的简易版,主要用Android的属性动画实现!
Java
113
star
7

OkhttpDownloader

a multi-thread downloader for okhttp!
Java
86
star
8

AlipayUtil

[不再维护!!!]支付宝支付SDK的封装,只需要调用一个方法,传入参数和回调接口即可,像请求网络一样简单!
Java
58
star
9

MarqueeView

垂直跑马灯效果。
Java
47
star
10

OkHttpEngine

A simple wrapper for OkHttp!
Java
38
star
11

EasyAdapter

An simplify and practical version for hongyangAndroid [baseAdapter],重构了代码,并适配Kotlin。
Kotlin
33
star
12

LiveGiftPlayer

直播礼物特效播放器,支持MP4(支持4个方向的透明通道)和WEBP。
Java
23
star
13

DragPanel

A nice vertical drag layout, a bit like BottomSheet, but with strong customization!
Java
22
star
14

ImageGridView

【不再维护】微博,微信九宫格图片布局,搭配XPopup的大图浏览弹窗,体验好到飞起。
Java
19
star
15

XPermission

一行代码进行权限申请,用回调处理结果,轻量无依赖!
Java
19
star
16

DragPhotoViewer

【已过时,不再更新,请使用更强大的XPopup!】完全模仿掘金Android App大图浏览拖拽效果!
Java
18
star
17

QingBlogFrontend

Qing博客系统前端,基于Vue2套件,axios, ElementUI构建的单页应用!
Vue
14
star
18

RippleLayout

A simple ripple effect!
Java
13
star
19

flutter_gank

A flutter client for http://gank.io/
Dart
12
star
20

QingBlogBackend

Qing博客系统后台,基于Koa2和NodeJs编写。
JavaScript
4
star
21

QingFramework

采用Kotlin封装的Android快速开发框架,包括基于LiveData的MVVM架构和通用组件。
Kotlin
4
star
22

li-xiaojun.github.io

My personal Github pages test!
HTML
3
star
23

flutter_study

for study flutter.
Dart
3
star
24

crypto-wrapper

A simple wrapper for node crypto module, zero dependency, easy to use!
JavaScript
3
star
25

multipage-vue-spa

基于vue-cli重构的大型多页面SPA项目架构。
JavaScript
1
star
26

FrameAnimationView

一个帧动画实现,用来替换官方的AnimationDrawable,解决内存溢出!
Kotlin
1
star
27

GayHub

A Github Android Client ! 【Developping...】
Kotlin
1
star
28

ffshare

随启随用的文件分享工具,一条命令即可启动!
JavaScript
1
star