簡(jiǎn)介
SmartRefreshLayout是一個(gè)“聰明”或者“智能”的下拉刷新布局,由于它的“智能”,它不只是支持所有的View,還支持多層嵌套的視圖結(jié)構(gòu)。它繼承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了現(xiàn)在流行的各種刷新布局的優(yōu)點(diǎn),包括谷歌官方的 SwipeRefreshLayout,其他第三方的 Ultra-Pull-To-Refresh、TwinklingRefreshLayout 。還集成了各種炫酷的 Header 和 Footer。 SmartRefreshLayout的目標(biāo)是打造一個(gè)強(qiáng)大,穩(wěn)定,成熟的下拉刷新框架,并集成各種的炫酷、多樣、實(shí)用、美觀的Header和Footer。
使用
1.效果
2.依賴
//1.1.0 API改動(dòng)過(guò)大,老用戶升級(jí)需謹(jǐn)慎
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14'//沒(méi)有使用特殊Header,可以不加這行
//1.0.5 當(dāng)1.1.0出現(xiàn)問(wèn)題可以回退到1.0.5.1
compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1'
compile 'com.scwang.smartrefresh:SmartRefreshHeader:1.0.5.1'//沒(méi)有使用特殊Header,可以不加這行
compile 'com.android.support:design:25.3.1'//版本隨意(非必須,引用可以解決無(wú)法預(yù)覽問(wèn)題)
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.監(jiān)聽
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表示加載失敗
}
});
關(guān)閉刷新和下拉功能
mRefreshLayout.setEnableRefresh(false);
mRefreshLayout.setEnableLoadMore(false);
屬性表格
Attributes
| name | format | description |
|---|---|---|
| srlPrimaryColor | color | 主題顏色 |
| srlAccentColor | color | 強(qiáng)調(diào)顏色 |
| srlReboundDuration | integer | 釋放后回彈動(dòng)畫時(shí)長(zhǎng)(默認(rèn)250毫秒) |
| srlHeaderHeight | dimension | Header的標(biāo)準(zhǔn)高度(dp) |
| srlFooterHeight | dimension | Footer的標(biāo)準(zhǔn)高度(dp) |
| srlHeaderInsetStart | dimension | Header的起始偏移量(dp)V1.0.5 |
| srlFooterInsetStart | dimension | Footer的起始偏移量(dp)V1.0.5 |
| srlDragRate | float | 顯示拖動(dòng)高度/真實(shí)拖動(dòng)高度(默認(rèn)0.5,阻尼效果) |
| srlHeaderMaxDragRate | float | Header最大拖動(dòng)高度/Header標(biāo)準(zhǔn)高度(默認(rèn)2,要求>=1) |
| srlFooterMaxDragRate | float | Footer最大拖動(dòng)高度/Footer標(biāo)準(zhǔn)高度(默認(rèn)2,要求>=1) |
| srlHeaderTriggerRate | float | Header觸發(fā)刷新距離 與 HeaderHeight 的比率(默認(rèn)1) |
| srlFooterTriggerRate | float | Footer觸發(fā)加載距離 與 FooterHeight 的比率(默認(rèn)1) |
| srlEnableRefresh | boolean | 是否開啟下拉刷新功能(默認(rèn)true) |
| srlEnableLoadMore | boolean | 是否開啟加上拉加載功能(默認(rèn)false-智能開啟) |
| srlEnableAutoLoadMore | boolean | 是否監(jiān)聽列表慣性滾動(dòng)到底部時(shí)觸發(fā)加載事件(默認(rèn)true) |
| srlEnableHeaderTranslationContent | boolean | 拖動(dòng)Header的時(shí)候是否同時(shí)拖動(dòng)內(nèi)容(默認(rèn)true) |
| srlEnableFooterTranslationContent | boolean | 拖動(dòng)Footer的時(shí)候是否同時(shí)拖動(dòng)內(nèi)容(默認(rèn)true) |
| srlEnablePreviewInEditMode | boolean | 是否在編輯模式時(shí)顯示預(yù)覽效果(默認(rèn)true) |
| srlEnablePureScrollMode | boolean | 是否開啟純滾動(dòng)模式(默認(rèn)false-開啟時(shí)只支持一個(gè)子視圖) |
| srlEnableOverScrollDrag | boolean | 是否啟用越界拖動(dòng)(仿蘋果效果)V1.0.4 |
| srlEnableOverScrollBounce | boolean | 設(shè)置是否開啟越界回彈功能(默認(rèn)true) |
| srlEnableNestedScrolling | boolean | 是否開啟嵌套滾動(dòng)NestedScrolling(默認(rèn)false-智能開啟) |
| srlEnableScrollContentWhenLoaded | boolean | 是否在加載完成之后滾動(dòng)內(nèi)容顯示新數(shù)據(jù)(默認(rèn)-true) |
| srlEnableScrollContentWhenRefreshed | boolean | 是否在刷新成功之后滾動(dòng)內(nèi)容顯示新數(shù)據(jù)(默認(rèn)-true) |
| srlEnableLoadMoreWhenContentNotFull | boolean | 在內(nèi)容不滿一頁(yè)的時(shí)候,是否可以上拉加載更多(默認(rèn)-false) |
| srlEnableFooterFollowWhenLoadFinished | boolean | 是否在全部加載結(jié)束之后Footer跟隨內(nèi)容 |
| srlEnableClipHeaderWhenFixedBehind | boolean | 是否剪裁Header當(dāng)時(shí)樣式為FixedBehind時(shí)V1.0.5 |
| srlEnableClipFooterWhenFixedBehind | boolean | 是否剪裁Footer當(dāng)時(shí)樣式為FixedBehind時(shí)V1.0.5 |
| srlDisableContentWhenRefresh | boolean | 是否在刷新的時(shí)候禁止內(nèi)容的一切手勢(shì)操作(默認(rèn)false) |
| srlDisableContentWhenLoading | boolean | 是否在加載的時(shí)候禁止內(nèi)容的一切手勢(shì)操作(默認(rèn)false) |
| srlFixedHeaderViewId | id | 指定固定頂部的視圖Id |
| srlFixedFooterViewId | id | 指定固定底部的視圖Id |
| srlHeaderTranslationViewId | id | 指定下拉Header時(shí)偏移的視圖Id |
| srlFooterTranslationViewId | id | 指定上拉Footer時(shí)偏移的視圖Id |
Method
| name | format | description |
|---|---|---|
| setPrimaryColors | colors | 主題\強(qiáng)調(diào)顏色 |
| setPrimaryColorsId | colors | 主題\強(qiáng)調(diào)顏色資源Id |
| setReboundDuration | integer | 釋放后回彈動(dòng)畫時(shí)長(zhǎng)(默認(rèn)250毫秒) |
| setHeaderHeight | dimension | Header的標(biāo)準(zhǔn)高度(px/dp 兩個(gè)版本) |
| setFooterHeight | dimension | Footer的標(biāo)準(zhǔn)高度(px/dp 兩個(gè)版本) |
| setHeaderInsetStart | dimension | Header起始位置偏移量(px/dp 兩個(gè)版本)V1.0.5 |
| setFooterInsetStart | dimension | Footer起始位置偏移量(px/dp 兩個(gè)版本)V1.0.5 |
| setDragRate | float | 顯示拖動(dòng)高度/真實(shí)拖動(dòng)高度(默認(rèn)0.5,阻尼效果) |
| setHeaderMaxDragRate | float | Header最大拖動(dòng)高度/Header標(biāo)準(zhǔn)高度(默認(rèn)2,要求>=1) |
| setFooterMaxDragRate | float | Footer最大拖動(dòng)高度/Footer標(biāo)準(zhǔn)高度(默認(rèn)2,要求>=1) |
| setHeaderTriggerRate | float | Header觸發(fā)刷新距離 與 HeaderHeight 的比率(默認(rèn)1) |
| setFooterTriggerRate | float | Footer觸發(fā)加載距離 與 FooterHeight 的比率(默認(rèn)1) |
| setEnableRefresh | boolean | 是否開啟下拉刷新功能(默認(rèn)true) |
| setEnableLoadMore | boolean | 是否開啟加上拉加載功能(默認(rèn)false-智能開啟) |
| setEnableHeaderTranslationContent | boolean | 拖動(dòng)Header的時(shí)候是否同時(shí)拖動(dòng)內(nèi)容(默認(rèn)true) |
| setEnableFooterTranslationContent | boolean | 拖動(dòng)Footer的時(shí)候是否同時(shí)拖動(dòng)內(nèi)容(默認(rèn)true) |
| setEnableAutoLoadMore | boolean | 是否監(jiān)聽列表慣性滾動(dòng)到底部時(shí)觸發(fā)加載事件(默認(rèn)true) |
| setEnablePureScrollMode | boolean | 是否開啟純滾動(dòng)模式(默認(rèn)false-開啟時(shí)只支持一個(gè)子視圖) |
| setEnableOverScrollDrag | boolean | 是否啟用越界拖動(dòng)(仿蘋果效果)V1.0.4 |
| setEnableOverScrollBounce | boolean | 設(shè)置是否開啟越界回彈功能(默認(rèn)true) |
| setEnableNestedScrolling | boolean | 是否開啟嵌套滾動(dòng)NestedScrolling(默認(rèn)false-智能開啟) |
| setEnableScrollContentWhenLoaded | boolean | 是否在加載完成之后滾動(dòng)內(nèi)容顯示新數(shù)據(jù)(默認(rèn)-true) |
| setEnableScrollContentWhenRefreshed | boolean | 是否在刷新成功之后滾動(dòng)內(nèi)容顯示新數(shù)據(jù)(默認(rèn)-true)V1.0.5 |
| setEnableLoadMoreWhenContentNotFull | boolean | 在內(nèi)容不滿一頁(yè)的時(shí)候,是否可以上拉加載更多(默認(rèn)-false) |
| setEnableFooterFollowWhenLoadFinished | boolean | 是否在全部加載結(jié)束之后Footer跟隨內(nèi)容 |
| setEnableClipHeaderWhenFixedBehind | boolean | 是否剪裁Header當(dāng)時(shí)樣式為FixedBehind時(shí)V1.0.5 |
| setEnableClipFooterWhenFixedBehind | boolean | 是否剪裁Footer當(dāng)時(shí)樣式為FixedBehind時(shí)V1.0.5 |
| setDisableContentWhenRefresh | boolean | 是否在刷新的時(shí)候禁止內(nèi)容的一切手勢(shì)操作(默認(rèn)false) |
| setDisableContentWhenLoading | boolean | 是否在加載的時(shí)候禁止內(nèi)容的一切手勢(shì)操作(默認(rèn)false) |
| setReboundInterpolator | Interpolator | 設(shè)置回彈動(dòng)畫的插值器(默認(rèn)減速) |
| setRefreshHeader | RefreshHeader | 設(shè)置指定的Header(默認(rèn)貝塞爾雷達(dá)) |
| setRefreshFooter | RefreshFooter | 設(shè)置指定的Footer(默認(rèn)球脈沖) |
| setRefreshContent | View | 設(shè)置刷新Content(用于動(dòng)態(tài)替換空布局) |
| setOnRefreshListener | OnRefreshListener | 設(shè)置刷新監(jiān)聽器(不設(shè)置,默認(rèn)3秒后關(guān)刷新) |
| setOnLoadMoreListener | OnLoadMoreListener | 設(shè)置加載監(jiān)聽器(不設(shè)置,默認(rèn)3秒后關(guān)加載) |
| setOnRefreshLoadMoreListener | OnRefreshLoadMoreListener | 同時(shí)設(shè)置上面兩個(gè)監(jiān)聽器 |
| setOnMultiPurposeListener | OnMultiPurposeListener | 設(shè)置多功能監(jiān)聽器 |
| setLoadMoreFinished | boolean | 設(shè)置全部數(shù)據(jù)加載完成,之后不會(huì)觸發(fā)加載事件 |
| setScrollBoundaryDecider | boundary | 設(shè)置滾動(dòng)邊界判斷 |
| finishRefresh | (int delayed) | 完成刷新,結(jié)束刷新動(dòng)畫 |
| finishLoadMore | (int delayed) | 完成加載,結(jié)束加載動(dòng)畫 |
| finishRefresh | (boolean success) | 完成刷新,并設(shè)置是否成功 |
| finishLoadMore | (boolean success) | 完成加載,并設(shè)置是否成功 |
| finishLoadMoreWithNoMoreData | 完成加載并標(biāo)記沒(méi)有更多數(shù)據(jù)(V1.0.4) | |
| closeHeaderOrFooter | 關(guān)閉 Header 或者 Footer(1.1.0) | |
| resetNoMoreData | V1.0.4(V1.1.0刪除,用 setNoMoreData(false) 代替) | |
| setNoMoreData | boolean | 設(shè)置更多數(shù)據(jù)狀態(tài)V1.0.5 |
| getRefreshHeader | RefreshHeader | 獲取Header |
| getRefreshFooter | RefreshFooter | 獲取Footer |
| getState | RefreshState | 獲取當(dāng)前狀態(tài) |
| isRefreshing | boolean | (V1.1.0刪除,版本用 getState==Refreshing 代替) |
| isLoading | boolean | (V1.1.0刪除,版本用 getState==Loading 代替) |
| autoRefresh | (int delayed) | 觸發(fā)自動(dòng)刷新 |
| autoLoadMore | (int delayed) | 觸發(fā)自動(dòng)加載 |
Header-Attributes
| name | format | description |
|---|---|---|
| srlPrimaryColor | color | 主題顏色 |
| srlAccentColor | color | 強(qiáng)調(diào)顏色 |
| srlDrawableArrow | drawable | 箭頭圖片 |
| srlDrawableProgress | drawable | 轉(zhuǎn)動(dòng)圖片 |
| srlClassicsSpinnerStyle | enum | 變換樣式:Translate(平行移動(dòng))、Scale(拉伸形變)、FixedBehind(固定在背后) |
| srlSpinnerStyle | enum | 變換樣式:srlClassicsSpinnerStyle的全部、FixedFront(固定在前面或全屏) |
| srlFinishDuration | int | 動(dòng)畫結(jié)束時(shí),顯示完成狀態(tài)停留的時(shí)間(毫秒) |
| srlEnableLastTime | boolean | 是否顯示上次更新時(shí)間(默認(rèn)true) |
| srlDrawableMarginRight | dimension | 圖片相對(duì)右邊文字的距離(默認(rèn)20dp) |
| srlTextTimeMarginTop | dimension | 更新時(shí)間相對(duì)上面標(biāo)題的距離(默認(rèn)2dp) |
| srlTextSizeTitle | dimension | 標(biāo)題文字大?。J(rèn)16sp) |
| srlTextSizeTime | dimension | 時(shí)間文字大?。J(rèn)12sp) |
Header-Method
| name | format | description |
|---|---|---|
| setPrimaryColor | color | 主題顏色 |
| setAccentColor | color | 強(qiáng)調(diào)顏色 |
| setArrowDrawable | drawable | 設(shè)置箭頭圖片 |
| setProgressDrawable | drawable | 設(shè)置轉(zhuǎn)動(dòng)圖片 |
| setArrowBitmap | bitmap | 設(shè)置箭頭圖片(V1.1.0版本刪除) |
| setProgressBitmap | bitmap | 設(shè)置轉(zhuǎn)動(dòng)圖片(V1.1.0版本刪除) |
| setArrowResource | int | 設(shè)置箭頭圖片 |
| setProgressResource | int | 設(shè)置轉(zhuǎn)動(dòng)圖片 |
| setSpinnerStyle | enum | 變換樣式:參考屬性srlSpinnerStyle |
| setClassicsSpinnerStyle | enum | 變換樣式:參考屬性srlClassicsSpinnerStyle |
| setFinishDuration | int | 設(shè)置動(dòng)畫結(jié)束時(shí),顯示完成狀態(tài)停留的時(shí)間(毫秒) |
| setEnableLastTime | boolean | 是否顯示上次更新時(shí)間(默認(rèn)true) |
| setTextSizeTitle | dimension | 標(biāo)題文字大?。J(rèn)16sp) |
| setTextSizeTime | dimension | 時(shí)間文字大小(默認(rèn)12sp) |
| setLastUpdateText | string | 手動(dòng)設(shè)置更新時(shí)間,將不會(huì)自動(dòng)更新時(shí)間 |