文章目录
一、SwipeRefreshLayout简介
SwipeRefreshLayout是官方提供的下拉刷新解决控件,具有使用简单,灵活等特点。不足的地方,不可以自定义刷新的头部和加载更多功能。不过通过修改SwipeRefreshLayout可以轻松实现这些功能,本文只介绍使用和对各个方法进行说明。
在实际开发中多对SwipeRefreshLayout二次封装,更改刷新UI。
SuperEasyRefreshLayout是一个非常强大的二次封装控件,不仅美化了刷新UI,而且可以根据需要自定义UI效果的View,且实现了上拉加载更多的功能。
SuperEasyRefreshLayout的使用介绍的地址是:http://blog.csdn.net/fightingxia/article/details/75307875
SuperEasyRefreshLayout的源码在GitHub上的地址是:https://github.com/guozhengXia/SuperEasyRefreshLayout
二、常用方法
方法 | 解释 |
---|---|
setColorSchemeResources(int…colorReslds) | 设置下拉进度条的颜色主题,参数可变,并且是资源id,最多设置四种不同的颜色。 |
setProgressBackgroundSchemeResource(int coloRes) | 设置下拉进度条的背景颜色,默认白色。 |
isRefreshing() | 判断当前的状态是否是刷新状态。 |
setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener) | 设置监听,需要重写onRefresh()方法, 顶部下拉时会调用这个方法,在里面实现请求数据的逻辑,设置下拉进度条消失等等。 |
setRefreshing(boolean refreshing) | 设置刷新状态,true表示正在刷新,false表示取消刷新 |
三、基本使用
1.首先在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
- 1
**> 可能会遇到的错误:
1.无法加载 android.support.v4.widget.SwipeRefreshLayout
解决:android.support.v4.widget.SwipeRefreshLayout改为androidx.swiperefreshlayout.widget.SwipeRefreshLayout**
2.在xml添加引入SwipeRefreshLayout的代码
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">
<span class="token operator"><</span>androidx<span class="token punctuation">.</span>swiperefreshlayout<span class="token punctuation">.</span>widget<span class="token punctuation">.</span>SwipeRefreshLayout android<span class="token punctuation">:</span>id<span class="token operator">=</span><span class="token string">"@+id/refreshLayout"</span> android<span class="token punctuation">:</span>layout_width<span class="token operator">=</span><span class="token string">"wrap_content"</span> android<span class="token punctuation">:</span>layout_height<span class="token operator">=</span><span class="token string">"wrap_content"</span> android<span class="token punctuation">:</span>text<span class="token operator">=</span><span class="token string">"Hello World!"</span><span class="token operator">></span> <span class="token operator"><</span>ListView android<span class="token punctuation">:</span>id<span class="token operator">=</span><span class="token string">"@+id/listView"</span> android<span class="token punctuation">:</span>layout_width<span class="token operator">=</span><span class="token string">"match_parent"</span> android<span class="token punctuation">:</span>layout_height<span class="token operator">=</span><span class="token string">"wrap_content"</span> <span class="token operator">/</span><span class="token operator">></span> <span class="token operator"><</span><span class="token operator">/</span>androidx<span class="token punctuation">.</span>swiperefreshlayout<span class="token punctuation">.</span>widget<span class="token punctuation">.</span>SwipeRefreshLayout<span class="token operator">></span>
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
3.然后在MainActivy设置,下拉刷新的回调即可
refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
//模拟网络请求需要3000毫秒,请求完成,设置setRefreshing 为false,停止刷新
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
refreshLayout.setRefreshing(false);
}
}, 3000);
}
});
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
四、进阶使用
SwipeRefreshLayout 还提供了一些方法设置进度的样式,滑动的开始位置和结束位置等
方法名 | 作用 |
---|---|
setSize(int size) | 设置进度View样式的大小,只有两个值DEFAULT和LARGE |
setProgressViewOffset(boolean scale, int start, int end) | 设置进度View下拉的起始点和结束点,scale 是指设置是否需要放大或者缩小动画 |
setProgressViewEndTarget(boolean scale, int end) | 设置进度View下拉的结束点,scale 是指设置是否需要放大或者缩小动画 |
setColorSchemeColors(@ColorInt int… colors) } | 设置进度View的组合颜色,在手指上下滑时使用第一个颜色,在刷新中,会一个个颜色进行切换 |
setDistanceToTriggerSync(int distance) | 设置触发刷新的距离 |
setOnChildScrollUpCallback(@Nullable OnChildScrollUpCallback callback) | 如果child是自己自定义的view,可以通过这个回调,告诉swipeRefreshLayoutchild是否可以滑动 |
简单的例子:
//设置进度View样式的大小,只有两个值DEFAULT和LARGE
refreshLayout.setSize(mSetSizeBean.size);
//设置进度View下拉的起始点和结束点,scale 是指设置是否需要放大或者缩小动画
refreshLayout.setProgressViewOffset(true, -0, 100);
//设置进度View下拉的结束点,scale 是指设置是否需要放大或者缩小动画
refreshLayout.setProgressViewEndTarget(true, 180);
//设置进度View的组合颜色,在手指上下滑时使用第一个颜色,在刷新中,会一个个颜色进行切换
refreshLayout.setColorSchemeColors(Color.BLACK, Color.GREEN, Color.RED, Color.YELLOW, Color.BLUE);
//设置触发刷新的距离
refreshLayout.setDistanceToTriggerSync(200);
//如果child是自己自定义的view,可以通过这个回调,告诉mSwipeRefreshLayoutchild是否可以滑动
refreshLayout.setOnChildScrollUpCallback(null);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13