今天偶然发现一个超好用的刷新框架–SmartRefreshLayout,它以打造一个强大,稳定,成熟的下拉刷新框架为目标,并集成各种的炫酷、多样、实用、美观的Header和Footer,首先要这位感谢大佬,源github地址:https://github.com/scwang90/SmartRefreshLayout
配置
1 2 3 4 5 6 7 8 9 | implementation 'androidx.appcompat:appcompat:1.0.0' //必须 1.0.0 以上 implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1' //核心必须依赖 implementation 'com.scwang.smart:refresh-header-classics:2.0.1' //经典刷新头 implementation 'com.scwang.smart:refresh-header-radar:2.0.1' //雷达刷新头 implementation 'com.scwang.smart:refresh-header-falsify:2.0.1' //虚拟刷新头 implementation 'com.scwang.smart:refresh-header-material:2.0.1' //谷歌刷新头 implementation 'com.scwang.smart:refresh-header-two-level:2.0.1' //二级刷新头 implementation 'com.scwang.smart:refresh-footer-ball:2.0.1' //球脉冲加载 implementation 'com.scwang.smart:refresh-footer-classics:2.0.1' //经典加载 |
并在 gradle.properties 中添加
1 2 | android.useAndroidX=true android.enableJetifier=true |
在XML布局文件中添加 SmartRefreshLayout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml version="1.0" encoding="utf-8"?> <com.scwang.smart.refresh.layout.SmartRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/refreshLayout" android:layout_width="match_parent" android:layout_height="match_parent"> <com.scwang.smart.refresh.header.ClassicsHeader android:layout_width="match_parent" android:layout_height="wrap_content"/> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:overScrollMode="never" android:background="#fff" /> <com.scwang.smart.refresh.footer.ClassicsFooter android:layout_width="match_parent" android:layout_height="wrap_content"/> </com.scwang.smart.refresh.layout.SmartRefreshLayout> |
在 Activity 或者 Fragment 中添加代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout); refreshLayout.setRefreshHeader(new ClassicsHeader(this)); refreshLayout.setRefreshFooter(new ClassicsFooter(this)); refreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh(RefreshLayout refreshlayout) { refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败 } }); refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { @Override public void onLoadMore(RefreshLayout refreshlayout) { refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败 } }); |
代码设置Header和Footer
代码中设置样式,优先级最高
1 2 3 4 5 | final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout); //设置 Header 为 贝塞尔雷达 样式 refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true)); //设置 Footer 为 球脉冲 样式 refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale)); |
全局设置样式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class App extends Application { //static 代码段可以防止内存泄露 static { //设置全局的Header构建器 SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() { @Override public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) { layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);//全局设置主题颜色 return new ClassicsHeader(context);//.setTimeFormat(new DynamicTimeFormat("更新于 %s"));//指定为经典Header,默认是 贝塞尔雷达Header } }); //设置全局的Footer构建器 SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() { @Override public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) { //指定为经典Footer,默认是 BallPulseFooter return new ClassicsFooter(context).setDrawableSize(20); } }); } } |
还有一些经常用到的属性
1 2 3 4 5 6 7 8 9 10 11 12 | refreshLayout.setEnableRefresh(true);//是否启用下拉刷新功能 refreshLayout.setEnableLoadMore(false);//是否启用上拉加载功能 refreshLayout.setEnableAutoLoadMore(true);//是否启用列表惯性滑动到底部时自动加载更多 refreshLayout.autoRefresh();//自动刷新 refreshLayout.autoLoadMore();//自动加载 refreshLayout.autoRefresh(400);//延迟400毫秒后自动刷新 refreshLayout.autoLoadMore(400);//延迟400毫秒后自动加载 refreshLayout.finishRefresh();//结束刷新 refreshLayout.finishLoadMore();//结束加载 refreshLayout.setDisableContentWhenRefresh(false);//是否在刷新的时候禁止列表的操作 refreshLayout.setDisableContentWhenLoading(false);//是否在加载的时候禁止列表的操作 refreshLayout.finishLoadMoreWithNoMoreData();//完成加载并标记没有更多数据 |