SwipeRefreshLayout使用
来源:互联网 发布:怎么读java源码 编辑:程序博客网 时间:2024/06/14 21:20
1、用法
<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/refreshClient" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/spinner1"> <!-- 这里是一个子view,仅能有一个子view,一般为AbsListView --></android.support.v4.widget.SwipeRefreshLayout>让Activity继承SwipeRefreshLayout.OnRefreshListener然后refreshLayout.setOnRefreshListener(this);即可监听刷新动作,只要在onRefresh()里执行刷新代码即可
博主在使用时发现SwipeRefreshLayout会占满剩余屏幕,且它的子view也是一样,可以看SwipeRefreshLayout源码的onMeasure和onLayout方法。如果想要使它的子view是适应内容高度的话,博主测试了下,跟ScrollView的做法是一样的,但是这样子的话AbsListView就不能滑动了,从而知道SwipeRefreshLayout跟ScrollView还是不同的,之后就试了下在AbsListView外面套一层ScrollView,这时候就能让AbsListView自适应内容高度且能上下滑动了。
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (mTarget == null) { ensureTarget(); } if (mTarget == null) { return; } mTarget.measure(MeasureSpec.makeMeasureSpec( getMeasuredWidth() - getPaddingLeft() - getPaddingRight(), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec( getMeasuredHeight() - getPaddingTop() - getPaddingBottom(), MeasureSpec.EXACTLY)); mCircleView.measure(MeasureSpec.makeMeasureSpec(mCircleDiameter, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(mCircleDiameter, MeasureSpec.EXACTLY)); mCircleViewIndex = -1; // Get the index of the circleview. for (int index = 0; index < getChildCount(); index++) { if (getChildAt(index) == mCircleView) { mCircleViewIndex = index; break; } } } 其中mCircleView就是那个刷新时出现的转圈圈的ImageView,而mTarget就是我们在布局文件里定义的SwipeRefreshLayout子View。可以看到mTarget和SwipeRefreshLayout的宽高是一致的,当然啦,不包括SwipeRefreshLayout的padding。
protected void onLayout(boolean changed, int left, int top, int right, int bottom) { final int width = getMeasuredWidth(); final int height = getMeasuredHeight(); if (getChildCount() == 0) { return; } if (mTarget == null) { ensureTarget(); } if (mTarget == null) { return; } final View child = mTarget; final int childLeft = getPaddingLeft(); final int childTop = getPaddingTop(); final int childWidth = width - getPaddingLeft() - getPaddingRight(); final int childHeight = height - getPaddingTop() - getPaddingBottom(); child.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight); int circleWidth = mCircleView.getMeasuredWidth(); int circleHeight = mCircleView.getMeasuredHeight(); mCircleView.layout((width / 2 - circleWidth / 2), mCurrentTargetOffsetTop, (width / 2 + circleWidth / 2), mCurrentTargetOffsetTop + circleHeight); } 一开始博主有试过在这里让mTarget自适应内容高度,也成功了,结果就是不能滑动,跟上面的一个方法效果一样,所以最后只能选择再套一层ScrollView了。
这里只是android本身自带的刷新控件的使用,网上很多人把这个layout修改成下拉刷新,上拉加载的控件了,博主还没看过源码,水平较低,暂不知怎么实现。如果要实现,怎么的也要将SwipeRefreshLayout负责出来修改,同时也要把MaterialProgressDrawable和CircleImageView复制出来。
阅读全文
0 0
- SwipeRefreshLayout 使用
- SwipeRefreshLayout使用
- SwipeRefreshLayout 使用
- SwipeRefreshLayout使用
- SwipeRefreshLayout使用
- Android SwipeRefreshLayout 使用
- SwipeRefreshLayout 使用问题小结
- SwipeRefreshLayout简单使用
- SwipeRefreshLayout使用心得
- SwipeRefreshLayout基本使用
- CoordinatorLayout、SwipeRefreshLayout的使用
- SwipeRefreshLayout的简单使用
- SwipeRefreshLayout简单使用
- RecyclerView+SwipeRefreshLayout使用细节
- SwipeRefreshLayout 的简单使用
- 关于SwiperefreshLayout使用
- Android SwipeRefreshLayout的使用
- SwipeRefreshLayout 与RecyclerView 使用
- 欢迎使用CSDN-markdown编辑器
- @responseBody注解的使用
- TCP/IP协议栈初始化流程
- 设计模式之适配器模式
- C++ 二叉树创建、遍历访问、删除
- SwipeRefreshLayout使用
- Java并发之ThreadLocal
- 函数对象简单使用
- 组合与继承
- leetcode-26
- 同一网段
- CSDN 发布保存失败,请稍后重试。
- GalaxyOJ-725 (二分+容斥)
- D