我在SwipeRefreshLayout中有一个Webview,工作正常。但是只要我需要在webview中向上滚动,就会调用pull to refresh功能。有没有办法在触摸webview中的特定区域时禁用该功能?这是我的LayoutFile
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android:android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</android:android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
答案 0 :(得分:0)
您需要为webview创建一个触控侦听器。在那里,如果触摸事件坐标在您的目标区域内,您将在父级上调用requestDisallowInterceptTouchEvent(SwipeRefreshLayout)。您需要在事件Up或Cancel上重新启用父项上的触摸事件。
下面这个骨架代码(父是你的SwipeRefreshLayout视图):
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (touch in target area) {
parent.requestDisallowInterceptTouchEvent(true);
}
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (disallowed parent) {
parent.requestDisallowInterceptTouchEvent(false);
}
break;
default:
break;
}
您也可以尝试在SwipeRefreshLayout视图上调用setEnabled(false)而不是requestDisallowInterceptTouchEvent。
您可以考虑的另一个选项是,只有当webview的滚动Y为0时才启用拉动刷新,因此如果您位于webview内容的顶部。当你开始向下滚动时,你将禁用你的父(SwipeRefreshLayout),当你向上滚动并到达顶部(滚动Y == 0)时,你将重新启用你的父。