gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:06 25 4
gpt4 key购买 nike

我正在使用支持库 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 中的回归,这是由于阻力计算为 removed 造成的来自 SwipeRefreshLayoutonTouchEvent() 回调,仅保留在 onInterceptTouchEvent() 回调中。因此 SwipeRefreshLayout 只有在它拦截 来自(触摸消耗)子 View 的触摸事件时才能正常工作。有趣的是,当 SwipeRefreshLayout 最初在支持库的版本 19.1.0 中引入时也存在此问题,但为 fixed。在第 20 版中。

我已经在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com