我正在使用 Support Library v21 中的 SwipeRefreshLayout。它与 List 或 ScrollView 等可滚动内容完美配合,但不适用于静态布局:
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/refresh_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:text="Content"/>
</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
这段代码运行良好。
视频: Example
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/refresh_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:text="Content"/>
</android.support.v4.widget.SwipeRefreshLayout>
而事实并非如此。
视频: Example
是否可以在 SwipeRefreshLayout 中处理不可滚动的内容?
最佳答案
更新:
此问题现已在支持库的 24.2.0 版中得到修复。
原答案:
这是支持库版本 21 中的回归,因为阻力计算是来自 onTouchEvent()
的 SwipeRefreshLayout
回调的 removed,并且仅保留在 onInterceptTouchEvent()
回调中。因此 SwipeRefreshLayout
只有在它从(触摸消费)子 View
拦截触摸事件时才能正常工作。有趣的是,当 SwipeRefreshLayout
最初在支持库的 19.1.0 版中引入,但在 20 版中是 fixed 时,也存在此问题。
我已经在 https://code.google.com/p/android/issues/detail?id=87789 的问题跟踪器上报告了这个
这可以通过扩展 SwipeRefreshLayout
并将其 onTouchEvent()
回调重定向到 onInterceptTouchEvent()
直到它返回 true 来修补:
public class FixedSwipeRefreshLayout extends SwipeRefreshLayout {
public FixedSwipeRefreshLayout(Context context) {
super(context);
}
public FixedSwipeRefreshLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
private boolean handleTouch = true;
@Override
public boolean onTouchEvent(MotionEvent ev) {
int action = MotionEventCompat.getActionMasked(ev);
switch (action) {
case MotionEvent.ACTION_DOWN:
handleTouch = false;
break;
default:
if (handleTouch) {
return super.onTouchEvent(ev);
}
handleTouch = onInterceptTouchEvent(ev);
switch (action) {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
handleTouch = true;
break;
}
break;
}
return true;
}
}
关于android - 来自支持库的 SwipeRefreshLayout。 v21 不适用于静态内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27600815/