Android 智能刷新框架SmartRefreshLayout

 

原鏈接

SmartRefreshLayout是一個“聰明”或者“智能”的下拉刷新佈局,由於它的“智能”,它不只是支持所有的View,還支持多層嵌套的視圖結構。它繼承自ViewGroup 而不是FrameLayout或LinearLayout,提高了性能。 也吸取了現在流行的各種刷新佈局的優點,包括谷歌官方的 SwipeRefreshLayout,其他第三方的 Ultra-Pull-To-RefreshTwinklingRefreshLayout 。還集成了各種炫酷的 Header 和 Footer。 SmartRefreshLayout的目標是打造一個強大,穩定,成熟的下拉刷新框架,並集成各種的炫酷、多樣、實用、美觀的Header和Footer。

SmartRefreshLayout官網

導入依賴

在build.gradle中添加依賴

//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,可以不加這行
compile 'com.android.support:appcompat-v7:25.3.1'//版本 23以上(必須)

//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:appcompat-v7:25.3.1'//版本 23以上(必須)
compile 'com.android.support:design:25.3.1'//版本隨意(非必須,引用可以解決無法預覽問題)

使用指定的Header和Footer

  • 方法一:全局設置(優先級最低,會被下面兩種方法取代)
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);
               }
           });
   }
}
  • 方法二 XML佈局文件指定(優先級中等,會被方法三覆蓋)
<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 將會改變 Header 和 Footer 的主題顏色-->
   <!--srlEnablePreviewInEditMode 可以開啓和關閉預覽功能-->
   <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代碼設置(優先級最高)
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、默認使用
佈局:根佈局爲LinearLayout,SmartRefreshLayout直接包裹一個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>

代碼:設置刷新監聽,下拉刷新功能默認是打開的: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);
            }
        });

設置加載監聽,加載更多功能默認爲關閉:mRefreshLayout.setEnableLoadMore(false);,如果設置監聽會打開加載更多功能:

        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;
        }
    });

 

 

顯示的效果:

刷新.png

 

上拉加載.png


2、經典風格
佈局

 <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>

 

經典效果.png


在其中可以根據需要進行各種屬性設置;
注:在設置屬性時,代碼中針對文字大小使用的是sp,故有特殊需求的需要改變設置:
如不隨系統字體大小改變的實現方式,或自己設置dp:((TextView)header.findViewById(ClassicsHeader.ID_TEXT_TITLE)).setTextSize(TypedValue.COMPLEX_UNIT_DIP,16);

 

3 FalsifyHeader 虛假的Header,用於 真正的 Header 在RefreshLayout外部時,使用本虛假的FalsifyHeader填充在RefreshLayout內部,具體使用方法參考紙飛機;
單獨使用FalsifyHead的效果爲在下拉時出現空白下拉布局,這個也是可以監聽下拉滴:


FalsifyFooter 上拉加載和Falsifyheader是一樣的空白背景效果,是可以拉動監聽的

 

4、自定義Header可以參考Demo中的使用-Custom
5、淘寶二樓header TwoLevelHeader,參考demo中實戰-淘寶二樓
下面的爲特殊樣式header,需要引用:com.scwang.smartrefresh:SmartRefreshHeader:1.1.0-alpha-14
6、飛行氣球:DeliveryHeader
7、掉落盒子:DropBoxHeader
8、全屏水滴:WaveSwipeHeader
9、官方下拉Meterial:MaterialHeader
10、顏色閃爍漸變頭:StoreHouseHeader
11、戰爭城市遊戲頭:FunGameBattleCityHeader
12、打磚塊遊戲:FunGameHitBlockHeader
13、彈出圓圈加載:BezierCircleHeader
14、衝上雲霄:TaurusHeader
15、金色校園:PhoenixHeader


官網給的一些設置屬性方法

代碼、xml設置和Classics的一些屬性設置方法

SmartRefreshLayout


java代碼設置

public class RefreshActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //下面示例中的值等於默認值
        RefreshLayout refreshLayout = (RefreshLayout)findViewById(R.id.refreshLayout);
        refreshLayout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);
        refreshLayout.setDragRate(0.5f);//顯示下拉高度/手指真實下拉高度=阻尼效果
        refreshLayout.setReboundDuration(300);//回彈動畫時長(毫秒)

        refreshLayout.setHeaderHeight(100);//Header標準高度(顯示下拉高度>=標準高度 觸發刷新)
        refreshLayout.setHeaderHeightPx(100);//同上-像素爲單位 (V1.1.0刪除)
        refreshLayout.setFooterHeight(100);//Footer標準高度(顯示上拉高度>=標準高度 觸發加載)
        refreshLayout.setFooterHeightPx(100);//同上-像素爲單位 (V1.1.0刪除)

        refreshLayout.setFooterHeaderInsetStart(0);//設置 Header 起始位置偏移量 1.0.5
        refreshLayout.setFooterHeaderInsetStartPx(0);//同上-像素爲單位 1.0.5 (V1.1.0刪除)
        refreshLayout.setFooterFooterInsetStart(0);//設置 Footer 起始位置偏移量 1.0.5
        refreshLayout.setFooterFooterInsetStartPx(0);//同上-像素爲單位 1.0.5 (V1.1.0刪除)

        refreshLayout.setHeaderMaxDragRate(2);//最大顯示下拉高度/Header標準高度
        refreshLayout.setFooterMaxDragRate(2);//最大顯示下拉高度/Footer標準高度
        refreshLayout.setHeaderTriggerRate(1);//觸發刷新距離 與 HeaderHeight 的比率1.0.4
        refreshLayout.setFooterTriggerRate(1);//觸發加載距離 與 FooterHeight 的比率1.0.4

        refreshLayout.setEnableRefresh(true);//是否啓用下拉刷新功能
        refreshLayout.setEnableLoadMore(false);//是否啓用上拉加載功能
        refreshLayout.setEnableAutoLoadMore(true);//是否啓用列表慣性滑動到底部時自動加載更多
        refreshLayout.setEnablePureScrollMode(false);//是否啓用純滾動模式
        refreshLayout.setEnableNestedScroll(false);//是否啓用嵌套滾動
        refreshLayout.setEnableOverScrollBounce(true);//是否啓用越界回彈
        refreshLayout.setEnableScrollContentWhenLoaded(true);//是否在加載完成時滾動列表顯示新的內容
        refreshLayout.setEnableHeaderTranslationContent(true);//是否下拉Header的時候向下平移列表或者內容
        refreshLayout.setEnableFooterTranslationContent(true);//是否上拉Footer的時候向上平移列表或者內容
        refreshLayout.setEnableLoadMoreWhenContentNotFull(true);//是否在列表不滿一頁時候開啓上拉加載功能
        refreshLayout.setEnableFooterFollowWhenLoadFinished(false);//是否在全部加載結束之後Footer跟隨內容1.0.4
        refreshLayout.setEnableOverScrollDrag(false);//是否啓用越界拖動(仿蘋果效果)1.0.4

        refreshLayout.setEnableScrollContentWhenRefreshed(true);//是否在刷新完成時滾動列表顯示新的內容 1.0.5
        refreshLayout.srlEnableClipHeaderWhenFixedBehind(true);//是否剪裁Header當時樣式爲FixedBehind時1.0.5
        refreshLayout.srlEnableClipFooterWhenFixedBehind(true);//是否剪裁Footer當時樣式爲FixedBehind時1.0.5

        refreshLayout.setDisableContentWhenRefresh(false);//是否在刷新的時候禁止列表的操作
        refreshLayout.setDisableContentWhenLoading(false);//是否在加載的時候禁止列表的操作

        refreshLayout.setOnMultiPurposeListener(new SimpleMultiPurposeListener());//設置多功能監聽器
        refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDecider());//設置滾動邊界判斷
        refreshLayout.setScrollBoundaryDecider(new ScrollBoundaryDeciderAdapter());//自定義滾動邊界

        refreshLayout.setRefreshHeader(new ClassicsHeader(context));//設置Header
        refreshLayout.setRefreshFooter(new ClassicsFooter(context));//設置Footer
        refreshLayout.setRefreshContent(new View(context));//設置刷新Content(用於非xml佈局代替addView)1.0.4

        refreshLayout.autoRefresh();//自動刷新
        refreshLayout.autoLoadMore();//自動加載
        refreshLayout.autoRefresh(400);//延遲400毫秒後自動刷新
        refreshLayout.autoLoadMore(400);//延遲400毫秒後自動加載
        refreshLayout.finishRefresh();//結束刷新
        refreshLayout.finishLoadMore();//結束加載
        refreshLayout.finishRefresh(3000);//延遲3000毫秒後結束刷新
        refreshLayout.finishLoadMore(3000);//延遲3000毫秒後結束加載
        refreshLayout.finishRefresh(false);//結束刷新(刷新失敗)
        refreshLayout.finishLoadMore(false);//結束加載(加載失敗)
        refreshLayout.finishLoadMoreWithNoMoreData();//完成加載並標記沒有更多數據 1.0.4
        refreshLayout.closeHeaderOrFooter();//關閉正在打開狀態的 Header 或者 Footer(1.1.0)
        refreshLayout.resetNoMoreData();//恢復沒有更多數據的原始狀態 1.0.4(1.1.0刪除)
        refreshLayout.setNoMoreData(false);//恢復沒有更多數據的原始狀態 1.0.5

    }
}

//全局一次性設置默認屬性和默認Header
public class App extends Application {
    static {//使用static代碼段可以防止內存泄漏

        //設置全局默認配置(優先級最低,會被其他設置覆蓋)
        SmartRefreshLayout.setDefaultRefreshInitializer(new DefaultRefreshInitializer() {
            @Override
            public void initialize(@NonNull Context context, @NonNull RefreshLayout layout) {
                //開始設置全局的基本參數(可以被下面的DefaultRefreshHeaderCreator覆蓋)
                layout.setReboundDuration(1000);
                layout.setReboundInterpolator(new DropBounceInterpolator());
                layout.setFooterHeight(100);
                layout.setDisableContentWhenLoading(false);
                layout.setPrimaryColorsId(R.color.colorPrimary, android.R.color.white);
            }
        });

        //全局設置默認的 Header
        SmartRefreshLayout.setDefaultRefreshHeaderCreator(new DefaultRefreshHeaderCreator() {
            @Override
            public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
                //開始設置全局的基本參數(這裏設置的屬性只跟下面的MaterialHeader綁定,其他Header不會生效,能覆蓋DefaultRefreshInitializer的屬性和Xml設置的屬性)
                layout.setEnableHeaderTranslationContent(false);
                return new MaterialHeader(context).setColorSchemeResources(R.color.colorRed,R.color.colorGreen,R.color.colorBlue);
            }
        });
    }
}


xml代碼設置

<!-- 下面示例中的值等於默認值 -->
<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:強調顏色-->
    <!--srlPrimaryColor:主題顏色-->
    <!--srlEnablePreviewInEditMode:是否啓用Android Studio編輯xml時預覽效果-->
    <!--srlFixedFooterViewId:指定一個View在內容列表滾動時固定-->
    <!--srlFixedHeaderViewId:指定一個View在內容列表滾動時固定-->
    <!--srlHeaderTranslationViewId:指定下拉Header時偏移的視圖Id-->
    <!--srlFooterTranslationViewId:指定上拉Footer時偏移的視圖Id-->
    <!--未說明的:看上面的set方法說明-->
ClassicsHeader

java代碼設置

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 = "釋放進入二樓";
        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);//"釋放進入二樓";
        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"
        //下面示例中的值等於默認值
        ClassicsHeader header = (ClassicsHeader)findViewById(R.id.header);
        header.setAccentColor(android.R.color.white);//設置強調顏色
        header.setPrimaryColor(R.color.colorPrimary);//設置主題顏色
        header.setTextSizeTitle(16);//設置標題文字大小(sp單位)
        header.setTextSizeTitle(16, TypedValue.COMPLEX_UNIT_SP);//同上(1.1.0版本刪除)
        header.setTextSizeTime(10);//設置時間文字大小(sp單位)
        header.setTextSizeTime(10, TypedValue.COMPLEX_UNIT_SP);//同上(1.1.0版本刪除)
        header.setTextTimeMarginTop(10);//設置時間文字的上邊距(dp單位)
        header.setTextTimeMarginTopPx(10);//同上-像素單位(1.1.0版本刪除)
        header.setEnableLastTime(true);//是否顯示時間
        header.setFinishDuration(500);//設置刷新完成顯示的停留時間(設爲0可以關閉停留功能)
        header.setDrawableSize(20);//同時設置箭頭和圖片的大小(dp單位)
        header.setDrawableArrowSize(20);//設置箭頭的大小(dp單位)
        header.setDrawableProgressSize(20);//設置圖片的大小(dp單位)
        header.setDrawableMarginRight(20);//設置圖片和箭頭和文字的間距(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);//設置箭頭位圖(1.1.0版本刪除)
        header.setArrowDrawable(drawable);//設置箭頭圖片
        header.setArrowResource(R.drawable.ic_arrow);//設置箭頭資源
        header.setProgressBitmap(bitmap);//設置圖片位圖(1.1.0版本刪除)
        header.setProgressDrawable(drawable);//設置圖片
        header.setProgressResource(R.drawable.ic_progress);//設置圖片資源
        header.setTimeFormat(new DynamicTimeFormat("上次更新 %s"));//設置時間格式化(時間會自動更新)
        header.setLastUpdateText("上次更新 3秒前");//手動更新時間文字設置(將不會自動更新時間)
        header.setSpinnerStyle(SpinnerStyle.Translate);//設置移動樣式(不支持:MatchLayout)
    }
}


xml代碼設置

<!-- 下面示例中的值等於默認值 -->
<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>
ClassicsFooter

java代碼設置

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 = "沒有更多數據了";
    }
    @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);//"沒有更多數據了";

        //下面示例中的值等於默認值
        ClassicsFooter footer = (ClassicsFooter)findViewById(R.id.footer);
        footer.setAccentColor(android.R.color.white);//設置強調顏色
        footer.setPrimaryColor(R.color.colorPrimary);//設置主題顏色
        footer.setTextSizeTitle(16);//設置標題文字大小(sp單位)
        footer.setTextSizeTitle(16, TypedValue.COMPLEX_UNIT_SP);//同上
        footer.setFinishDuration(500);//設置刷新完成顯示的停留時間
        footer.setDrawableSize(20);//同時設置箭頭和圖片的大小(dp單位)
        footer.setDrawableArrowSize(20);//設置箭頭的大小(dp單位)
        footer.setDrawableProgressSize(20);//設置圖片的大小(dp單位)
        footer.setDrawableMarginRight(20);//設置圖片和箭頭和文字的間距(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);//設置箭頭位圖(1.1.0版本刪除)
        footer.setArrowDrawable(drawable);//設置箭頭圖片
        footer.setArrowResource(R.drawable.ic_arrow);//設置箭頭資源
        footer.setProgressBitmap(bitmap);//設置圖片位圖(1.1.0版本刪除)
        footer.setProgressDrawable(drawable);//設置圖片
        footer.setProgressResource(R.drawable.ic_progress);//設置圖片資源
        footer.setSpinnerStyle(SpinnerStyle.Translate);//設置移動樣式(不支持:MatchLayout)
    }
}
xml代碼設置

<!-- 下面示例中的值等於默認值 -->
<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>

屬性表格

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 手動設置更新時間,將不會自動更新時間

 

三方庫

發佈了53 篇原創文章 · 獲贊 21 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章