一萄涯、前言:
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. 導(dǎo)入依賴:
在build.gradle中添加依賴
//V7包版本
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-28'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-28'//沒有使用特殊Header,可以不加這行
implementation 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必須)
//androidx 版本
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-andx-11'
implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-andx-11'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
2. 使用指定的Header和Footer
-方法一:全局設(shè)置(優(yōu)先級最低膨桥,會(huì)被下面兩種方法取代)
public class App extends Application {
//static 代碼段可以防止內(nèi)存泄露
//static 代碼段可以防止內(nèi)存泄露
static {
//設(shè)置全局的Header構(gòu)建器
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
layout.setPrimaryColorsId(R.color.color_FFFAFAFA, R.color.color_FF00000);//全局設(shè)置主題顏色
ClassicsHeader classicsHeader = new ClassicsHeader(context);
return classicsHeader;////指定為經(jīng)典Header蛮浑,默認(rèn)是 貝塞爾雷達(dá)Header
}
});
//設(shè)置全局的Footer構(gòu)建器
SmartRefreshLayout.setDefaultRefreshFooterCreator(new DefaultRefreshFooterCreator() {
@Override
public RefreshFooter createRefreshFooter(Context context, RefreshLayout layout) {
//指定為經(jīng)典Footer,默認(rèn)是 BallPulseFooter
ClassicsFooter classicsFooter = new ClassicsFooter(context);
classicsFooter.setDrawableSize(20);
//底部加載動(dòng)畫和布局
classicsFooter.setVisibility(View.GONE);
//內(nèi)容不滿一頁時(shí)不能開啟上拉加載功能
layout.setEnableLoadMoreWhenContentNotFull(false);
return classicsFooter;
}
});
}
}
- 方法二 XML布局文件指定(優(yōu)先級中等只嚣,會(huì)被方法三覆蓋)
<com.scwang.smartrefresh.layout.SmartRefreshLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#444444"
app:srlPrimaryColor="#444444"
app:srlAccentColor="@android:color/white"
app:srlEnablePreviewInEditMode="true">
<!--srlAccentColor srlPrimaryColor 將會(huì)改變 Header 和 Footer 的主題顏色-->
<!--srlEnablePreviewInEditMode 可以開啟和關(guān)閉預(yù)覽功能-->
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/padding_common"
android:background="@android:color/white"
android:text="@string/description_define_in_xml"/>
<com.scwang.smartrefresh.layout.footer.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
- 方法三 Java代碼設(shè)置(優(yōu)先級最高)
final RefreshLayout refreshLayout = (RefreshLayout) findViewById(R.id.refreshLayout);
//設(shè)置 Header 為 貝塞爾雷達(dá) 樣式
refreshLayout.setRefreshHeader(new BezierRadarHeader(this).setEnableHorizontalDrag(true));
//設(shè)置 Footer 為 球脈沖 樣式
refreshLayout.setRefreshFooter(new BallPulseFooter(this).setSpinnerStyle(SpinnerStyle.Scale));
三呀打、各種效果和顯示操作:
1敦第、默認(rèn)使用
布局:根布局為LinearLayout,SmartRefreshLayout直接包裹一個(gè)RecyclerView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<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.SmartRefreshLayout>
</LinearLayout>
代碼:設(shè)置刷新監(jiān)聽,下拉刷新功能默認(rèn)是打開的:mRefreshLayout.setEnableRefresh(true);
RefreshLayout mRefreshLayout = findViewById(R.id.refreshLayout);
mRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
List<String> data = initDatas();
Message message = new Message();
message.what = 1 ;
message.obj = data ;
mHandler.sendMessageDelayed(message,2000);
}
});
設(shè)置加載監(jiān)聽抄邀,加載更多功能默認(rèn)為關(guān)閉:mRefreshLayout.setEnableLoadMore(false);宣鄙,如果設(shè)置監(jiān)聽會(huì)打開加載更多功能:
RefreshLayout mRefreshLayout = findViewById(R.id.refreshLayout);
mRefreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
List<String> data = initDatas();
Message message = new Message();
message.what = 2;
message.obj = data ;
mHandler.sendMessageDelayed(message,2000);
}
});
private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what){
case 1: //刷新加載
List<String> mList = (List<String>) msg.obj;
mRefreshLayout.finishRefresh(true);
adapter.setDatas(mList);
break;
case 2: //加載更多
List<String> mLoadMoreDatas = (List<String>) msg.obj;
mRefreshLayout.finishLoadMore(true);
adapter.addMoreValue(mLoadMoreDatas);
break;
}
return false;
}
});
顯示的效果:
2写烤、經(jīng)典風(fēng)格
布局
<com.scwang.smartrefresh.layout.SmartRefreshLayout
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"
app:srlClassicsSpinnerStyle="Translate"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
在其中可以根據(jù)需要進(jìn)行各種屬性設(shè)置焰扳;
注:在設(shè)置屬性時(shí),代碼中針對文字大小使用的是sp藐石,故有特殊需求的需要改變設(shè)置:
如不隨系統(tǒng)字體大小改變的實(shí)現(xiàn)方式即供,或自己設(shè)置dp:((TextView)header.findViewById(ClassicsHeader.ID_TEXT_TITLE)).setTextSize(TypedValue.COMPLEX_UNIT_DIP,16);
3、 FalsifyHeader 虛假的Header于微,用于 真正的 Header 在RefreshLayout外部時(shí)逗嫡,使用本虛假的FalsifyHeader填充在RefreshLayout內(nèi)部办素,具體使用方法參考紙飛機(jī);
單獨(dú)使用FalsifyHead的效果為在下拉時(shí)出現(xiàn)空白下拉布局祸穷,這個(gè)也是可以監(jiān)聽下拉滴:
FalsifyFooter 上拉加載和Falsifyheader是一樣的空白背景效果,是可以拉動(dòng)監(jiān)聽的
4勺三、自定義Header可以參考Demo中的使用-Custom
5雷滚、淘寶二樓header TwoLevelHeader,參考demo中實(shí)戰(zhàn)-淘寶二樓
下面的為特殊樣式header吗坚,需要引用:com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14
6祈远、飛行氣球:DeliveryHeader
7、掉落盒子:DropBoxHeader
8商源、全屏水滴:WaveSwipeHeader
9车份、官方下拉Meterial:MaterialHeader
10、顏色閃爍漸變頭:StoreHouseHeader
11牡彻、戰(zhàn)爭城市游戲頭:FunGameBattleCityHeader
12扫沼、打磚塊游戲:FunGameHitBlockHeader
13、彈出圓圈加載:BezierCircleHeader
14庄吼、沖上云霄:TaurusHeader
15缎除、金色校園:PhoenixHeader
四、 官網(wǎng)給的一些設(shè)置屬性方法
代碼总寻、xml設(shè)置和Classics的一些屬性設(shè)置方法
1器罐、全局設(shè)置:
1、SmartRefreshLayout
// java代碼設(shè)置
public class RefreshActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
//下面示例中的值等于默認(rèn)值
RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
refreshLayout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);
refreshLayout.setDragRate(0.5f);//顯示下拉高度/手指真實(shí)下拉高度=阻尼效果
refreshLayout.setReboundDuration(300);//回彈動(dòng)畫時(shí)長(毫秒)
refreshLayout.setHeaderHeight(100);//Header標(biāo)準(zhǔn)高度(顯示下拉高度>=標(biāo)準(zhǔn)高度 觸發(fā)刷新)
refreshLayout.setHeaderHeightPx(100);//同上-像素為單位 (V1.1.0刪除)
refreshLayout.setFooterHeight(100);//Footer標(biāo)準(zhǔn)高度(顯示上拉高度>=標(biāo)準(zhǔn)高度 觸發(fā)加載)
refreshLayout.setFooterHeightPx(100);//同上-像素為單位 (V1.1.0刪除)
refreshLayout.setFooterHeaderInsetStart(0);//設(shè)置 Header 起始位置偏移量 1.0.5
refreshLayout.setFooterHeaderInsetStartPx(0);//同上-像素為單位 1.0.5 (V1.1.0刪除)
refreshLayout.setFooterFooterInsetStart(0);//設(shè)置 Footer 起始位置偏移量 1.0.5
refreshLayout.setFooterFooterInsetStartPx(0);//同上-像素為單位 1.0.5 (V1.1.0刪除)
refreshLayout.setHeaderMaxDragRate(2);//最大顯示下拉高度/Header標(biāo)準(zhǔn)高度
refreshLayout.setFooterMaxDragRate(2);//最大顯示下拉高度/Footer標(biāo)準(zhǔn)高度
refreshLayout.setHeaderTriggerRate(1);//觸發(fā)刷新距離 與 HeaderHeight 的比率1.0.4
refreshLayout.setFooterTriggerRate(1);//觸發(fā)加載距離 與 FooterHeight 的比率1.0.4
refreshLayout.setEnableRefresh(true);//是否啟用下拉刷新功能
refreshLayout.setEnableLoadMore(false);//是否啟用上拉加載功能
refreshLayout.setEnableAutoLoadMore(true);//是否啟用列表慣性滑動(dòng)到底部時(shí)自動(dòng)加載更多
refreshLayout.setEnablePureScrollMode(false);//是否啟用純滾動(dòng)模式
refreshLayout.setEnableNestedScroll(false);//是否啟用嵌套滾動(dòng)
refreshLayout.setEnableOverScrollBounce(true);//是否啟用越界回彈
refreshLayout.setEnableScrollContentWhenLoaded(true);//是否在加載完成時(shí)滾動(dòng)列表顯示新的內(nèi)容
refreshLayout.setEnableHeaderTranslationContent(true);//是否下拉Header的時(shí)候向下平移列表或者內(nèi)容
refreshLayout.setEnableFooterTranslationContent(true);//是否上拉Footer的時(shí)候向上平移列表或者內(nèi)容
refreshLayout.setEnableLoadMoreWhenContentNotFull(true);//是否在列表不滿一頁時(shí)候開啟上拉加載功能
refreshLayout.setEnableFooterFollowWhenLoadFinished(false);//是否在全部加載結(jié)束之后Footer跟隨內(nèi)容1.0.4
refreshLayout.setEnableOverScrollDrag(false);//是否啟用越界拖動(dòng)(仿蘋果效果)1.0.4
refreshLayout.setEnableScrollContentWhenRefreshed(true);//是否在刷新完成時(shí)滾動(dòng)列表顯示新的內(nèi)容 1.0.5
refreshLayout.srlEnableClipHeaderWhenFixedBehind(true);//是否剪裁Header當(dāng)時(shí)樣式為FixedBehind時(shí)1.0.5
refreshLayout.srlEnableClipFooterWhenFixedBehind(true);//是否剪裁Footer當(dāng)時(shí)樣式為FixedBehind時(shí)1.0.5
refreshLayout.setDisableContentWhenRefresh(false);//是否在刷新的時(shí)候禁止列表的操作
refreshLayout.setDisableContentWhenLoading(false);//是否在加載的時(shí)候禁止列表的操作
refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener());//設(shè)置多功能監(jiān)聽器
refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDecider());//設(shè)置滾動(dòng)邊界判斷
refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDeciderAdapter());//自定義滾動(dòng)邊界
refreshLayout.setRefreshHeader(new ClassicsHeader(context));//設(shè)置Header
refreshLayout.setRefreshFooter(new ClassicsFooter(context));//設(shè)置Footer
refreshLayout.setRefreshContent(new View(context));//設(shè)置刷新Content(用于非xml布局代替addView)1.0.4
refreshLayout.autoRefresh();//自動(dòng)刷新
refreshLayout.autoLoadMore();//自動(dòng)加載
refreshLayout.autoRefresh(400);//延遲400毫秒后自動(dòng)刷新
refreshLayout.autoLoadMore(400);//延遲400毫秒后自動(dòng)加載
refreshLayout.finishRefresh();//結(jié)束刷新
refreshLayout.finishLoadMore();//結(jié)束加載
refreshLayout.finishRefresh(3000);//延遲3000毫秒后結(jié)束刷新
refreshLayout.finishLoadMore(3000);//延遲3000毫秒后結(jié)束加載
refreshLayout.finishRefresh(false);//結(jié)束刷新(刷新失斀バ小)
refreshLayout.finishLoadMore(false);//結(jié)束加載(加載失敽浞弧)
refreshLayout.finishLoadMoreWithNoMoreData();//完成加載并標(biāo)記沒有更多數(shù)據(jù) 1.0.4
refreshLayout.closeHeaderOrFooter();//關(guān)閉正在打開狀態(tài)的 Header 或者 Footer(1.1.0)
refreshLayout.resetNoMoreData();//恢復(fù)沒有更多數(shù)據(jù)的原始狀態(tài) 1.0.4(1.1.0刪除)
refreshLayout.setNoMoreData(false);//恢復(fù)沒有更多數(shù)據(jù)的原始狀態(tài) 1.0.5
}
}
//全局一次性設(shè)置默認(rèn)屬性和默認(rèn)Header
public class App extends Application {
static {//使用static代碼段可以防止內(nèi)存泄漏
//設(shè)置全局默認(rèn)配置(優(yōu)先級最低,會(huì)被其他設(shè)置覆蓋)
SmartRefreshLayout.setDefaultRefreshInitializer(new DefaultRefreshInitializer() {
@Override
public void initialize(@NonNull Context context, @NonNull RefreshLayout layout) {
//開始設(shè)置全局的基本參數(shù)(可以被下面的DefaultRefreshHeaderCreator覆蓋)
layout.setReboundDuration(1000);
layout.setReboundInterpolator(new DropBounceInterpolator());
layout.setFooterHeight(100);
layout.setDisableContentWhenLoading(false);
layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);
}
});
//全局設(shè)置默認(rèn)的 Header
SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
@Override
public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
//開始設(shè)置全局的基本參數(shù)(這里設(shè)置的屬性只跟下面的MaterialHeader綁定祟印,其他Header不會(huì)生效肴沫,能覆蓋DefaultRefreshInitializer的屬性和Xml設(shè)置的屬性)
layout.setEnableHeaderTranslationContent(false);
return new MaterialHeader(context).setColorSchemeResources(R.color.colorRed,R.color.colorGreen,R.color.colorBlue);
}
});
}
}
xml代碼設(shè)置
<!-- 下面示例中的值等于默認(rèn)值 -->
<com.scwang.smartrefresh.layout.SmartRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:srlAccentColor="@android:color/white"
app:srlPrimaryColor="@color/colorPrimary"
app:srlReboundDuration="300"
app:srlDragRate="0.5"
app:srlHeaderMaxDragRate="2"
app:srlFooterMaxDragRate="2"
app:srlHeaderTriggerRate="1"
app:srlFooterTriggerRate="1"
app:srlHeaderHeight="100dp"
app:srlFooterHeight="100dp"
app:srlHeaderInsetStart="0dp"
app:srlFooterInsetStart="0dp"
app:srlEnableRefresh="true"
app:srlEnableLoadMore="true"
app:srlEnableAutoLoadMore="true"
app:srlEnablePureScrollMode="false"
app:srlEnableNestedScrolling="false"
app:srlEnableOverScrollDrag="true"
app:srlEnableOverScrollBounce="true"
app:srlEnablePreviewInEditMode="true"
app:srlEnableScrollContentWhenLoaded="true"
app:srlEnableScrollContentWhenRefreshed="true"
app:srlEnableHeaderTranslationContent="true"
app:srlEnableFooterTranslationContent="true"
app:srlEnableLoadMoreWhenContentNotFull="false"
app:srlEnableFooterFollowWhenLoadFinished="false"
app:srlEnableClipHeaderWhenFixedBehind="true"
app:srlEnableClipFooterWhenFixedBehind="true"
app:srlDisableContentWhenRefresh="false"
app:srlDisableContentWhenLoading="false"
app:srlFixedFooterViewId="@+id/header_fixed"
app:srlFixedHeaderViewId="@+id/footer_fixed"
app:srlHeaderTranslationViewId="@+id/header_translation"
app:srlFooterTranslationViewId="@+id/footer_translation"
/>
<!--srlAccentColor:強(qiáng)調(diào)顏色-->
<!--srlPrimaryColor:主題顏色-->
<!--srlEnablePreviewInEditMode:是否啟用Android Studio編輯xml時(shí)預(yù)覽效果-->
<!--srlFixedFooterViewId:指定一個(gè)View在內(nèi)容列表滾動(dòng)時(shí)固定-->
<!--srlFixedHeaderViewId:指定一個(gè)View在內(nèi)容列表滾動(dòng)時(shí)固定-->
<!--srlHeaderTranslationViewId:指定下拉Header時(shí)偏移的視圖Id-->
<!--srlFooterTranslationViewId:指定上拉Footer時(shí)偏移的視圖Id-->
<!--未說明的:看上面的set方法說明-->
2、ClassicsHeader
//java代碼設(shè)置
public class RefreshActivity extends Activity {
static {
ClassicsHeader.REFRESH_HEADER_PULLDOWN = "下拉可以刷新";
ClassicsHeader.REFRESH_HEADER_REFRESHING = "正在刷新...";
ClassicsHeader.REFRESH_HEADER_LOADING = "正在加載...";
ClassicsHeader.REFRESH_HEADER_RELEASE = "釋放立即刷新";
ClassicsHeader.REFRESH_HEADER_FINISH = "刷新完成";
ClassicsHeader.REFRESH_HEADER_FAILED = "刷新失敗";
ClassicsHeader.REFRESH_HEADER_SECONDARY = "釋放進(jìn)入二樓";
ClassicsHeader.REFRESH_HEADER_LASTTIME = "上次更新 M-d HH:mm";
ClassicsHeader.REFRESH_HEADER_LASTTIME = "'Last update' M-d HH:mm";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
ClassicsHeader.REFRESH_HEADER_PULLDOWN = getString(R.string.header_pulldown);//"下拉可以刷新";
ClassicsHeader.REFRESH_HEADER_REFRESHING = getString(R.string.header_refreshing);//"正在刷新...";
ClassicsHeader.REFRESH_HEADER_LOADING = getString(R.string.header_loading);//"正在加載...";
ClassicsHeader.REFRESH_HEADER_RELEASE = getString(R.string.header_release);//"釋放立即刷新";
ClassicsHeader.REFRESH_HEADER_FINISH = getString(R.string.header_finish);//"刷新完成";
ClassicsHeader.REFRESH_HEADER_FAILED = getString(R.string.header_failed);//"刷新失敗";
ClassicsHeader.REFRESH_HEADER_SECONDARY = getString(R.string.header_secondary);//"釋放進(jìn)入二樓";
ClassicsHeader.REFRESH_HEADER_LASTTIME = getString(R.string.header_lasttime);//"上次更新 M-d HH:mm";
ClassicsHeader.REFRESH_HEADER_LASTTIME = getString(R.string.header_lasttime);//"'Last update' M-d HH:mm"
//下面示例中的值等于默認(rèn)值
ClassicsHeader header = (ClassicsHeader)findViewById(R.id.header);
header.setAccentColor(android.R.color.white);//設(shè)置強(qiáng)調(diào)顏色
header.setPrimaryColor(R.color.colorPrimary);//設(shè)置主題顏色
header.setTextSizeTitle(16);//設(shè)置標(biāo)題文字大信岳怼(sp單位)
header.setTextSizeTitle(16, TypedValue.COMPLEX_UNIT_SP);//同上(1.1.0版本刪除)
header.setTextSizeTime(10);//設(shè)置時(shí)間文字大蟹恪(sp單位)
header.setTextSizeTime(10, TypedValue.COMPLEX_UNIT_SP);//同上(1.1.0版本刪除)
header.setTextTimeMarginTop(10);//設(shè)置時(shí)間文字的上邊距(dp單位)
header.setTextTimeMarginTopPx(10);//同上-像素單位(1.1.0版本刪除)
header.setEnableLastTime(true);//是否顯示時(shí)間
header.setFinishDuration(500);//設(shè)置刷新完成顯示的停留時(shí)間(設(shè)為0可以關(guān)閉停留功能)
header.setDrawableSize(20);//同時(shí)設(shè)置箭頭和圖片的大小(dp單位)
header.setDrawableArrowSize(20);//設(shè)置箭頭的大心跷摹(dp單位)
header.setDrawableProgressSize(20);//設(shè)置圖片的大凶そ蟆(dp單位)
header.setDrawableMarginRight(20);//設(shè)置圖片和箭頭和文字的間距(dp單位)
header.setDrawableSizePx(20);//同上-像素單位
header.setDrawableArrowSizePx(20);//同上-像素單位(1.1.0版本刪除)
header.setDrawableProgressSizePx(20);//同上-像素單位(1.1.0版本刪除)
header.setDrawableMarginRightPx(20);//同上-像素單位(1.1.0版本刪除)
header.setArrowBitmap(bitmap);//設(shè)置箭頭位圖(1.1.0版本刪除)
header.setArrowDrawable(drawable);//設(shè)置箭頭圖片
header.setArrowResource(R.drawable.ic_arrow);//設(shè)置箭頭資源
header.setProgressBitmap(bitmap);//設(shè)置圖片位圖(1.1.0版本刪除)
header.setProgressDrawable(drawable);//設(shè)置圖片
header.setProgressResource(R.drawable.ic_progress);//設(shè)置圖片資源
header.setTimeFormat(new DynamicTimeFormat("上次更新 %s"));//設(shè)置時(shí)間格式化(時(shí)間會(huì)自動(dòng)更新)
header.setLastUpdateText("上次更新 3秒前");//手動(dòng)更新時(shí)間文字設(shè)置(將不會(huì)自動(dòng)更新時(shí)間)
header.setSpinnerStyle(SpinnerStyle.Translate);//設(shè)置移動(dòng)樣式(不支持:MatchLayout)
}
}
<!-- 下面示例中的值等于默認(rèn)值 -->
<com.scwang.smartrefresh.layout.SmartRefreshLayout>
<com.scwang.smartrefresh.layout.header.ClassicsHeader
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srlAccentColor="@android:color/white"
app:srlPrimaryColor="@color/colorPrimary"
app:srlTextSizeTitle="16sp"
app:srlTextSizeTime="10dp"
app:srlTextTimeMarginTop="2dp"
app:srlEnableLastTime="true"
app:srlFinishDuration="500"
app:srlDrawableSize="20dp"
app:srlDrawableArrowSize="20dp"
app:srlDrawableProgressSize="20dp"
app:srlDrawableMarginRight="20dp"
app:srlDrawableArrow="@drawable/ic_arrow"
app:srlDrawableProgress="@drawable/ic_progress"
app:srlClassicsSpinnerStyle="Translate"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
3、ClassicsFooter
//java代碼設(shè)置
public class RefreshActivity extends Activity {
static {
ClassicsFooter.REFRESH_FOOTER_PULLING = "上拉加載更多";
ClassicsFooter.REFRESH_FOOTER_RELEASE = "釋放立即加載";
ClassicsFooter.REFRESH_FOOTER_REFRESHING = "正在刷新...";
ClassicsFooter.REFRESH_FOOTER_LOADING = "正在加載...";
ClassicsFooter.REFRESH_FOOTER_FINISH = "加載完成";
ClassicsFooter.REFRESH_FOOTER_FAILED = "加載失敗";
ClassicsFooter.REFRESH_FOOTER_NOTHING = "沒有更多數(shù)據(jù)了";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
ClassicsFooter.REFRESH_FOOTER_PULLING = getString(R.string.footer_pulling);//"上拉加載更多";
ClassicsFooter.REFRESH_FOOTER_RELEASE = getString(R.string.footer_release);//"釋放立即加載";
ClassicsFooter.REFRESH_FOOTER_REFRESHING = getString(R.string.footer_refreshing);//"正在刷新...";
ClassicsFooter.REFRESH_FOOTER_LOADING = getString(R.string.footer_loading);//"正在加載...";
ClassicsFooter.REFRESH_FOOTER_FINISH = getString(R.string.footer_finish);//"加載完成";
ClassicsFooter.REFRESH_FOOTER_FAILED = getString(R.string.footer_failed);//"加載失敗";
ClassicsFooter.REFRESH_FOOTER_NOTHING = getString(R.string.footer_nothing);//"沒有更多數(shù)據(jù)了";
//下面示例中的值等于默認(rèn)值
ClassicsFooter footer = (ClassicsFooter)findViewById(R.id.footer);
footer.setAccentColor(android.R.color.white);//設(shè)置強(qiáng)調(diào)顏色
footer.setPrimaryColor(R.color.colorPrimary);//設(shè)置主題顏色
footer.setTextSizeTitle(16);//設(shè)置標(biāo)題文字大杏罂蕖(sp單位)
footer.setTextSizeTitle(16, TypedValue.COMPLEX_UNIT_SP);//同上
footer.setFinishDuration(500);//設(shè)置刷新完成顯示的停留時(shí)間
footer.setDrawableSize(20);//同時(shí)設(shè)置箭頭和圖片的大谐烈隆(dp單位)
footer.setDrawableArrowSize(20);//設(shè)置箭頭的大小(dp單位)
footer.setDrawableProgressSize(20);//設(shè)置圖片的大屑跷(dp單位)
footer.setDrawableMarginRight(20);//設(shè)置圖片和箭頭和文字的間距(dp單位)
footer.setDrawableSizePx(20);//同上-像素單位(1.1.0版本刪除)
footer.setDrawableArrowSizePx(20);//同上-像素單位(1.1.0版本刪除)
footer.setDrawableProgressSizePx(20);//同上-像素單位(1.1.0版本刪除)
footer.setDrawableMarginRightPx(20);//同上-像素單位(1.1.0版本刪除)
footer.setArrowBitmap(bitmap);//設(shè)置箭頭位圖(1.1.0版本刪除)
footer.setArrowDrawable(drawable);//設(shè)置箭頭圖片
footer.setArrowResource(R.drawable.ic_arrow);//設(shè)置箭頭資源
footer.setProgressBitmap(bitmap);//設(shè)置圖片位圖(1.1.0版本刪除)
footer.setProgressDrawable(drawable);//設(shè)置圖片
footer.setProgressResource(R.drawable.ic_progress);//設(shè)置圖片資源
footer.setSpinnerStyle(SpinnerStyle.Translate);//設(shè)置移動(dòng)樣式(不支持:MatchLayout)
}
}
xml代碼設(shè)置
<!-- 下面示例中的值等于默認(rèn)值 -->
<com.scwang.smartrefresh.layout.SmartRefreshLayout>
<com.scwang.smartrefresh.layout.header.ClassicsFooter
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srlAccentColor="@android:color/white"
app:srlPrimaryColor="@color/colorPrimary"
app:srlTextSizeTitle="16sp"
app:srlFinishDuration="500"
app:srlDrawableSize="20dp"
app:srlDrawableArrowSize="20dp"
app:srlDrawableProgressSize="20dp"
app:srlDrawableMarginRight="20dp"
app:srlDrawableArrow="@drawable/ic_arrow"
app:srlDrawableProgress="@drawable/ic_progress"
app:srlClassicsSpinnerStyle="Translate"/>
</com.scwang.smartrefresh.layout.SmartRefreshLayout>
五豌习、表格屬性
1. Attributes
Attributes
name | format | description |
---|---|---|
srlPrimaryColor | color | 主題顏色 |
srlAccentColor | color | 強(qiáng)調(diào)顏色 |
srlReboundDuration | integer | 釋放后回彈動(dòng)畫時(shí)長(默認(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)容不滿一頁的時(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)容的一切手勢操作(默認(rèn)false) |
srlDisableContentWhenLoading | boolean | 是否在加載的時(shí)候禁止內(nèi)容的一切手勢操作(默認(rèn)false) |
srlFixedHeaderViewId | id | 指定固定頂部的視圖Id |
srlFixedFooterViewId | id | 指定固定底部的視圖Id |
srlHeaderTranslationViewId | id | 指定下拉Header時(shí)偏移的視圖Id |
srlFooterTranslationViewId | id | 指定上拉Footer時(shí)偏移的視圖Id |
2、 Method
name | format | description |
---|---|---|
setPrimaryColors | colors | 主題\強(qiáng)調(diào)顏色 |
setPrimaryColorsId | colors | 主題\強(qiáng)調(diào)顏色資源Id |
setReboundDuration | integer | 釋放后回彈動(dòng)畫時(shí)長(默認(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)容不滿一頁的時(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)容的一切手勢操作(默認(rèn)false) |
setDisableContentWhenLoading | boolean | 是否在加載的時(shí)候禁止內(nèi)容的一切手勢操作(默認(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)記沒有更多數(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)加載 |
3、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 | 圖片相對右邊文字的距離(默認(rèn)20dp) |
srlTextTimeMarginTop | dimension | 更新時(shí)間相對上面標(biāo)題的距離(默認(rèn)2dp) |
srlTextSizeTitle | dimension | 標(biāo)題文字大猩(默認(rèn)16sp) |
srlTextSizeTime | dimension | 時(shí)間文字大小(默認(rèn)12sp) |
4障簿、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)題文字大小(默認(rèn)16sp) |
setTextSizeTime | dimension | 時(shí)間文字大姓竟省(默認(rèn)12sp) |
setLastUpdateText | string | 手動(dòng)設(shè)置更新時(shí)間皆怕,將不會(huì)自動(dòng)更新時(shí)間 |
</article>