现在的社交软件如微博、微信朋友圈以及QQ空间等都提供下拉刷新的功能,把页面整体下拉即可触发页面刷新操作。Android提供了下拉刷新控件SwipeRefreshLayout,可用于简单的下拉刷新。
下面是SwipeRefreshLayout的常用方法说明。
->setOnRefreshListener:设置刷新监听器。需要重写监听器 OnRefreshListener 的 onRefresh 方法,该方法在下拉松开时触发。
->setRefreshing:设置刷新的状态。true表示正在刷新,false表示结束刷新。
->isRefreshing:判断是否正在刷新。
->setColorSchemeColors:设置进度圆圈的圆环颜色。
->setProgressBackgroundColorSchemeColor:设置进度圆圈的背景颜色。
->setProgressBackgroundColorSchemeColor:设置进度圆圈的背景颜色。
->setProgressViewOffset:设置进度圆圈的偏移量。
->setDistanceToTriggerSync:设置手势向下滑动多少距离才会触发刷新操作。P.S. SwipeRefreshLayout节点下面只能有一个直接子视图。如果有多个直接子视图,那么只会展示第一个子视图,后面的子视图将不予展示。这个直接子视图必须允许滚动,比如:ScrollView、ListView、GridView、RecyclerView等。如果不是这些视图,就不支持滚动,更不支持下拉刷新。
- layout/activity_swipe_refresh.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">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/srl_simple"
android:layout_width="match_parent"
android:layout_height="match_parent">
<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>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
- SwipeRefreshActivity.java逻辑代码如下:
package com.fukaimei.swiperefresh;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class SwipeRefreshActivity extends AppCompatActivity implements OnRefreshListener {
private TextView tv_simple;
private SwipeRefreshLayout srl_simple;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe_refresh);
tv_simple = (TextView) findViewById(R.id.tv_simple);
srl_simple = (SwipeRefreshLayout) findViewById(R.id.srl_simple);
srl_simple.setOnRefreshListener(this);
//旧版用下面的setColorScheme设置进度条颜色
//srl_simple.setColorScheme(R.color.red, R.color.orange, R.color.green, R.color.blue);
//新版用下面的setColorSchemeResources设置进度圆圈颜色
srl_simple.setColorSchemeResources(
R.color.red, R.color.orange, R.color.green, R.color.blue);
//旧版v4包中无下面三个方法
// srl_simple.setProgressBackgroundColorSchemeResource(R.color.black);
// srl_simple.setProgressViewOffset(true, 0, 50);
// srl_simple.setDistanceToTriggerSync(100);
}
@Override
public void onRefresh() {
tv_simple.setText("正在刷新");
mHandler.postDelayed(mRefresh, 2000);
}
private Handler mHandler = new Handler();
private Runnable mRefresh = new Runnable() {
@Override
public void run() {
tv_simple.setText("刷新完成");
srl_simple.setRefreshing(false);
}
};
}
- Demo程序运行效果界面截图如下: