初探SmartRefreshLayout

简介

SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,还支持多层嵌套的视图结构。它继承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了现在流行的各种刷新布局的优点,包括谷歌官方的 SwipeRefreshLayout,其他第三方的 Ultra-Pull-To-RefreshTwinklingRefreshLayout 。还集成了各种炫酷的 Header 和 Footer。 SmartRefreshLayout的目标是打造一个强大,稳定,成熟的下拉刷新框架,并集成各种的炫酷、多样、实用、美观的Header和Footer。

使用

1.效果

2.依赖

//1.1.0 API改动过大,老用户升级需谨慎
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14'//没有使用特殊Header,可以不加这行

//1.0.5 当1.1.0出现问题可以回退到1.0.5.1
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'//没有使用特殊Header,可以不加这行
compile 'com.android.support:design:25.3.1'//版本随意(非必须,引用可以解决无法预览问题)

3.xml

<?xml version="1.0" encoding="utf-8"?>
<com.scwang.smartrefresh.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.smartrefresh.layout.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:background="#fff"
            android:overScrollMode="never" />
    <com.scwang.smartrefresh.layout.footer.ClassicsFooter
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>

其中ClassicsHeader是自带头部样式, ClassicsFooter是自带底部样式, 可自定义.

自定义Header和Foote
4.监听

mRefreshLayout.setOnRefreshListener(new OnRefreshListener() { //下拉刷新
            @Override
            public void onRefresh(RefreshLayout refreshlayout) {
                refreshlayout.finishRefresh(2000/*,false*/);//传入false表示刷新失败
            }
        });
 
mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() { //上拉加载更多
            @Override
            public void onLoadMore(RefreshLayout refreshlayout) {
                refreshlayout.finishLoadMore(2000/*,false*/);//传入false表示加载失败
            }
        });

关闭刷新和下拉功能

mRefreshLayout.setEnableRefresh(false);
mRefreshLayout.setEnableLoadMore(false);

属性表格

Attributes

name format description
srlPrimaryColor color 主题颜色
srlAccentColor color 强调颜色
srlReboundDuration integer 释放后回弹动画时长(默认250毫秒)
srlHeaderHeight dimension Header的标准高度(dp)
srlFooterHeight dimension Footer的标准高度(dp)
srlHeaderInsetStart dimension Header的起始偏移量(dp)V1.0.5
srlFooterInsetStart dimension Footer的起始偏移量(dp)V1.0.5
srlDragRate float 显示拖动高度/真实拖动高度(默认0.5,阻尼效果)
srlHeaderMaxDragRate float Header最大拖动高度/Header标准高度(默认2,要求>=1)
srlFooterMaxDragRate float Footer最大拖动高度/Footer标准高度(默认2,要求>=1)
srlHeaderTriggerRate float Header触发刷新距离 与 HeaderHeight 的比率(默认1)
srlFooterTriggerRate float Footer触发加载距离 与 FooterHeight 的比率(默认1)
srlEnableRefresh boolean 是否开启下拉刷新功能(默认true)
srlEnableLoadMore boolean 是否开启加上拉加载功能(默认false-智能开启)
srlEnableAutoLoadMore boolean 是否监听列表惯性滚动到底部时触发加载事件(默认true)
srlEnableHeaderTranslationContent boolean 拖动Header的时候是否同时拖动内容(默认true)
srlEnableFooterTranslationContent boolean 拖动Footer的时候是否同时拖动内容(默认true)
srlEnablePreviewInEditMode boolean 是否在编辑模式时显示预览效果(默认true)
srlEnablePureScrollMode boolean 是否开启纯滚动模式(默认false-开启时只支持一个子视图)
srlEnableOverScrollDrag boolean 是否启用越界拖动(仿苹果效果)V1.0.4
srlEnableOverScrollBounce boolean 设置是否开启越界回弹功能(默认true)
srlEnableNestedScrolling boolean 是否开启嵌套滚动NestedScrolling(默认false-智能开启)
srlEnableScrollContentWhenLoaded boolean 是否在加载完成之后滚动内容显示新数据(默认-true)
srlEnableScrollContentWhenRefreshed boolean 是否在刷新成功之后滚动内容显示新数据(默认-true)
srlEnableLoadMoreWhenContentNotFull boolean 在内容不满一页的时候,是否可以上拉加载更多(默认-false)
srlEnableFooterFollowWhenLoadFinished boolean 是否在全部加载结束之后Footer跟随内容
srlEnableClipHeaderWhenFixedBehind boolean 是否剪裁Header当时样式为FixedBehind时V1.0.5
srlEnableClipFooterWhenFixedBehind boolean 是否剪裁Footer当时样式为FixedBehind时V1.0.5
srlDisableContentWhenRefresh boolean 是否在刷新的时候禁止内容的一切手势操作(默认false)
srlDisableContentWhenLoading boolean 是否在加载的时候禁止内容的一切手势操作(默认false)
srlFixedHeaderViewId id 指定固定顶部的视图Id
srlFixedFooterViewId id 指定固定底部的视图Id
srlHeaderTranslationViewId id 指定下拉Header时偏移的视图Id
srlFooterTranslationViewId id 指定上拉Footer时偏移的视图Id

Method

name format description
setPrimaryColors colors 主题\强调颜色
setPrimaryColorsId colors 主题\强调颜色资源Id
setReboundDuration integer 释放后回弹动画时长(默认250毫秒)
setHeaderHeight dimension Header的标准高度(px/dp 两个版本)
setFooterHeight dimension Footer的标准高度(px/dp 两个版本)
setHeaderInsetStart dimension Header起始位置偏移量(px/dp 两个版本)V1.0.5
setFooterInsetStart dimension Footer起始位置偏移量(px/dp 两个版本)V1.0.5
setDragRate float 显示拖动高度/真实拖动高度(默认0.5,阻尼效果)
setHeaderMaxDragRate float Header最大拖动高度/Header标准高度(默认2,要求>=1)
setFooterMaxDragRate float Footer最大拖动高度/Footer标准高度(默认2,要求>=1)
setHeaderTriggerRate float Header触发刷新距离 与 HeaderHeight 的比率(默认1)
setFooterTriggerRate float Footer触发加载距离 与 FooterHeight 的比率(默认1)
setEnableRefresh boolean 是否开启下拉刷新功能(默认true)
setEnableLoadMore boolean 是否开启加上拉加载功能(默认false-智能开启)
setEnableHeaderTranslationContent boolean 拖动Header的时候是否同时拖动内容(默认true)
setEnableFooterTranslationContent boolean 拖动Footer的时候是否同时拖动内容(默认true)
setEnableAutoLoadMore boolean 是否监听列表惯性滚动到底部时触发加载事件(默认true)
setEnablePureScrollMode boolean 是否开启纯滚动模式(默认false-开启时只支持一个子视图)
setEnableOverScrollDrag boolean 是否启用越界拖动(仿苹果效果)V1.0.4
setEnableOverScrollBounce boolean 设置是否开启越界回弹功能(默认true)
setEnableNestedScrolling boolean 是否开启嵌套滚动NestedScrolling(默认false-智能开启)
setEnableScrollContentWhenLoaded boolean 是否在加载完成之后滚动内容显示新数据(默认-true)
setEnableScrollContentWhenRefreshed boolean 是否在刷新成功之后滚动内容显示新数据(默认-true)V1.0.5
setEnableLoadMoreWhenContentNotFull boolean 在内容不满一页的时候,是否可以上拉加载更多(默认-false)
setEnableFooterFollowWhenLoadFinished boolean 是否在全部加载结束之后Footer跟随内容
setEnableClipHeaderWhenFixedBehind boolean 是否剪裁Header当时样式为FixedBehind时V1.0.5
setEnableClipFooterWhenFixedBehind boolean 是否剪裁Footer当时样式为FixedBehind时V1.0.5
setDisableContentWhenRefresh boolean 是否在刷新的时候禁止内容的一切手势操作(默认false)
setDisableContentWhenLoading boolean 是否在加载的时候禁止内容的一切手势操作(默认false)
setReboundInterpolator Interpolator 设置回弹动画的插值器(默认减速)
setRefreshHeader RefreshHeader 设置指定的Header(默认贝塞尔雷达)
setRefreshFooter RefreshFooter 设置指定的Footer(默认球脉冲)
setRefreshContent View 设置刷新Content(用于动态替换空布局)
setOnRefreshListener OnRefreshListener 设置刷新监听器(不设置,默认3秒后关刷新)
setOnLoadMoreListener OnLoadMoreListener 设置加载监听器(不设置,默认3秒后关加载)
setOnRefreshLoadMoreListener OnRefreshLoadMoreListener 同时设置上面两个监听器
setOnMultiPurposeListener OnMultiPurposeListener 设置多功能监听器
setLoadMoreFinished boolean 设置全部数据加载完成,之后不会触发加载事件
setScrollBoundaryDecider boundary 设置滚动边界判断
finishRefresh (int delayed) 完成刷新,结束刷新动画
finishLoadMore (int delayed) 完成加载,结束加载动画
finishRefresh (boolean success) 完成刷新,并设置是否成功
finishLoadMore (boolean success) 完成加载,并设置是否成功
finishLoadMoreWithNoMoreData 完成加载并标记没有更多数据(V1.0.4)
closeHeaderOrFooter 关闭 Header 或者 Footer(1.1.0)
resetNoMoreData V1.0.4(V1.1.0删除,用 setNoMoreData(false) 代替)
setNoMoreData boolean 设置更多数据状态V1.0.5
getRefreshHeader RefreshHeader 获取Header
getRefreshFooter RefreshFooter 获取Footer
getState RefreshState 获取当前状态
isRefreshing boolean (V1.1.0删除,版本用 getState==Refreshing 代替)
isLoading boolean (V1.1.0删除,版本用 getState==Loading 代替)
autoRefresh (int delayed) 触发自动刷新
autoLoadMore (int delayed) 触发自动加载

Header-Attributes

name format description
srlPrimaryColor color 主题颜色
srlAccentColor color 强调颜色
srlDrawableArrow drawable 箭头图片
srlDrawableProgress drawable 转动图片
srlClassicsSpinnerStyle enum 变换样式:Translate(平行移动)、Scale(拉伸形变)、FixedBehind(固定在背后)
srlSpinnerStyle enum 变换样式:srlClassicsSpinnerStyle的全部、FixedFront(固定在前面或全屏)
srlFinishDuration int 动画结束时,显示完成状态停留的时间(毫秒)
srlEnableLastTime boolean 是否显示上次更新时间(默认true)
srlDrawableMarginRight dimension 图片相对右边文字的距离(默认20dp)
srlTextTimeMarginTop dimension 更新时间相对上面标题的距离(默认2dp)
srlTextSizeTitle dimension 标题文字大小(默认16sp)
srlTextSizeTime dimension 时间文字大小(默认12sp)

Header-Method

name format description
setPrimaryColor color 主题颜色
setAccentColor color 强调颜色
setArrowDrawable drawable 设置箭头图片
setProgressDrawable drawable 设置转动图片
setArrowBitmap bitmap 设置箭头图片(V1.1.0版本删除)
setProgressBitmap bitmap 设置转动图片(V1.1.0版本删除)
setArrowResource int 设置箭头图片
setProgressResource int 设置转动图片
setSpinnerStyle enum 变换样式:参考属性srlSpinnerStyle
setClassicsSpinnerStyle enum 变换样式:参考属性srlClassicsSpinnerStyle
setFinishDuration int 设置动画结束时,显示完成状态停留的时间(毫秒)
setEnableLastTime boolean 是否显示上次更新时间(默认true)
setTextSizeTitle dimension 标题文字大小(默认16sp)
setTextSizeTime dimension 时间文字大小(默认12sp)
setLastUpdateText string 手动设置更新时间,将不会自动更新时间
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的...
    BrightLight阅读 185,413评论 10 147
  • 一、前言: SmartRefreshLayout是一个“聪明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只...
    因为我的心阅读 10,872评论 0 8
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,724评论 2 59
  • Share from here 我是个快乐的搬运工 Android智能下拉刷新框架,支持越界回弹,集成了几十种炫酷...
    MagicLon阅读 12,894评论 1 10
  • 程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这...
    拖小壳儿阅读 4,223评论 0 12