如何增大SwipeRefreshLayout组件的下拉拖动触发距离?
增大SwipeRefreshLayout下拉拖动距离的实现方式
SwipeRefreshLayout官方已经提供了修改触发刷新的下拉距离的API,不需要自定义复杂逻辑,按以下两种方式实现即可:
方法1:XML静态配置
适合固定下拉距离的场景,直接在布局文件中为SwipeRefreshLayout添加distanceToTriggerSync属性即可,单位为dp,默认触发距离约为64dp,增大该数值即可拉长需要拖动的距离:
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/swipeRefreshLayout" android:layout_width="match_parent" android:layout_height="match_parent" app:distanceToTriggerSync="120dp"> <!-- 嵌套的滚动内容布局,如RecyclerView、ScrollView等 --> </androidx.swiperefreshlayout>
方法2:代码动态配置
适合需要运行时动态调整下拉距离的场景,调用setDistanceToTriggerSync()方法即可,注意该方法传入的参数单位为像素(px),需要先把dp值转换为px再传入:
Kotlin 示例
// 将120dp转换为像素值 val triggerDistance = TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 120f, resources.displayMetrics ).toInt() swipeRefreshLayout.setDistanceToTriggerSync(triggerDistance)
Java 示例
// 将120dp转换为像素值 float dpValue = 120f; int triggerDistance = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, dpValue, getResources().getDisplayMetrics() ); swipeRefreshLayout.setDistanceToTriggerSync(triggerDistance);
额外补充说明
- 以上方法仅修改触发刷新的拖动距离,不会调整刷新指示器的最大下拉偏移量,如果需要同步让指示器可以下拉到更靠下的位置,可以调用
setProgressViewOffset()方法自定义指示器的显示范围:// 示例:指示器从距离顶部20dp的位置开始出现,最大下拉到距离顶部140dp的位置,不做缩放 val startOffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20f, resources.displayMetrics).toInt() val endOffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 140f, resources.displayMetrics).toInt() swipeRefreshLayout.setProgressViewOffset(false, startOffset, endOffset) - 如果你需要更特殊的滑动逻辑,可以自定义View继承SwipeRefreshLayout,重写
onTouchEvent方法调整滑动阈值即可。
内容的提问来源于stack exchange,提问作者Mohammad Javad Habibpour
相关产品推荐
相关产品推荐

