当我们只使用下拉刷新的时候,往往可以使用更加简洁的SwipeRefreshLayout来实现这个功能。下面我们就了解一下该控件的用法。
1.常用方法
- setOnRefreshListener:设置刷新监听器。需要重写监听器OnRefreshListener的onRefresh方法,该方法在下拉松开时触发。
- setRefreshing:设置刷新的状态。true表示正在刷新,false表示结束刷新。
- isRefreshing:判断是否正在刷新。
- setColorSchemeColors:设置进度圆圈的圆环颜色。
- setProgressBackgroundColorSchemeColor:设置进度圆圈的背景颜色。
- setProgressViewOffset:设置进度圆圈的偏移量。第一个参数表示进度圈是否缩放,第二个参数表示进度圈开始出现时距顶端的偏移,第三个参数表示进度圈拉到最大时距顶端的偏移。
- setDistanceToTriggerSync:设置手势向下滑动多少距离才会触发刷新操作。
2.示例代码
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="5dp">
<!-- 注意SwipeRefreshLayout节点必须使用完整路径 -->
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/srl_simple"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- SwipeRefreshLayout的下级必须是可滚动的视图 -->
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_simple"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="10dp"
android:text="这是一个简单视图"
android:textColor="#000000"
android:textSize="17sp" />
</ScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
private TextView tv_simple;
private SwipeRefreshLayout srl_simple; // 声明一个下拉刷新布局对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_simple = findViewById(R.id.tv_simple);
// 从布局文件中获取名叫srl_simple的下拉刷新布局
srl_simple = findViewById(R.id.srl_simple);
// 给srl_simple设置下拉刷新监听器
srl_simple.setOnRefreshListener(this);
// 设置下拉刷新布局的进度圆圈颜色
srl_simple.setColorSchemeResources(
R.color.red, R.color.orange, R.color.green, R.color.blue);
}
private Handler mHandler = new Handler(); // 声明一个处理器对象
// 定义一个刷新任务
private Runnable mRefresh = new Runnable() {
@Override
public void run() {
tv_simple.setText("刷新完成");
// 结束下拉刷新布局的刷新动作
srl_simple.setRefreshing(false);
}
};
/**
* 一旦在下拉刷新布局内部往下拉动页面,就触发下拉监听器的onRefresh方法
*/
@Override
public void onRefresh() {
tv_simple.setText("正在刷新");
// 延迟若干秒后启动刷新任务
mHandler.postDelayed(mRefresh, 2000);
}
}