效果如下所示:
需要在build.gradle里引入swiperefreshlayout的依赖
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
activity_main.xml文件
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".MainActivity">
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent">
<TextView
android:id="@+id/tv_refresh"
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="下拉开始刷新"/>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import androidx.core.content.ContextCompat
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val swipeRefreshLayout = findViewById<SwipeRefreshLayout>(R.id.swipe_refresh_layout)
val tvRefreshText = findViewById<TextView>(R.id.tv_refresh)
swipeRefreshLayout.setColorSchemeColors(
ContextCompat.getColor(this, R.color.purple_200),
ContextCompat.getColor(this, R.color.holo_green_light),
ContextCompat.getColor(this, R.color.holo_orange_light),
)
swipeRefreshLayout.setOnRefreshListener {
swipeRefreshLayout.postDelayed({
swipeRefreshLayout.isRefreshing = false
tvRefreshText.text = "加载完成"
}, 2000)
}
}
}
SwipeRefreshLayout
是 Android 提供的一个用于实现“下拉刷新”功能的控件,属于 androidx.swiperefreshlayout.widget.SwipeRefreshLayout
包。以下是它常用的 API 和说明。
✅ 常用 API 总结
1. setOnRefreshListener(OnRefreshListener listener)
设置刷新监听器,当用户下拉时触发。
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// 执行刷新逻辑
}
});
2. setRefreshing(boolean refreshing)
设置当前是否处于刷新状态。你可以通过代码触发或停止刷新动画。
swipeRefreshLayout.setRefreshing(true); // 显示刷新动画
swipeRefreshLayout.setRefreshing(false); // 停止刷新动画
3. isRefreshing()
判断当前是否正在刷新。
if (swipeRefreshLayout.isRefreshing()) {
// 说明正在刷新
}
4. setColorSchemeColors(int... colors)
设置刷新动画的颜色(传入颜色值,不是资源 ID)。
swipeRefreshLayout.setColorSchemeColors(
ContextCompat.getColor(this, R.color.colorPrimary),
ContextCompat.getColor(this, R.color.colorAccent)
);
5. setProgressBackgroundColorSchemeColor(int color)
设置刷新指示器的背景颜色。
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(
ContextCompat.getColor(this, R.color.white)
);
6. setDistanceToTriggerSync(int distance)
设置触发刷新所需下拉的距离(单位:像素)。
swipeRefreshLayout.setDistanceToTriggerSync(300);
7. setSize(int size)
设置刷新指示器的大小,可选值有:
SwipeRefreshLayout.LARGE
SwipeRefreshLayout.DEFAULT
swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);
8. setProgressViewOffset(boolean scale, int start, int end)
自定义刷新指示器的位置偏移。
swipeRefreshLayout.setProgressViewOffset(true, 0, 200);
📦 完整导包路径
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
🔍 官方文档链接
如果你想查看最新官方文档,可以访问:
https://developer.android.com/reference/androidx/swiperefreshlayout/widget/SwipeRefreshLayout