来自支持lib的SwipeRefreshLayout。 v21不适用于静态内容

时间:2014-12-22 10:27:52

标签: android android-support-library swiperefreshlayout

我使用支持库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中使用不可滚动的内容?

1 个答案:

答案 0 :(得分:9)

更新

此问题现已在支持库的版本24.2.0中得到修复。


原始答案:

这是支持库版本21中的回归,这是由于onTouchEvent()的{​​{1}}回调中的拖动计算为removed而导致的,仅保留在SwipeRefreshLayout {1}}回调。因此onInterceptTouchEvent()仅在拦截触摸来自(触摸消费)的孩子SwipeRefreshLayout的事件时才能正常工作。有趣的是,当View最初在支持库的19.1.0版本中引入时,此问题也存在,但在版本20中为fixed

我已在https://code.google.com/p/android/issues/detail?id=87789

的问题跟踪器上报告了此情况

可以通过扩展SwipeRefreshLayout并将其SwipeRefreshLayout回调重定向到onTouchEvent()来修补此问题,直到它返回true:

onInterceptTouchEvent()