我一直在寻找这个错误(我认为)大约一个星期,我认为这是支持库中的错误...
所以错误是当我尝试向上或向下滚动时,ViewPager会拦截触摸手势并在检测到甚至很小的水平手势时应用水平滚动。
这是它的动画:
我一直在使用自定义的 NestedScrollView 和 CoordinatorLayout 触摸监听器和手势,但到目前为止我还没有运气...:(
这是主要的xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main"
tools:ignore="UnusedAttribute">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|exitUntilCollapsed" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="bottom"
android:clipChildren="false"
app:layout_collapseMode="pin">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_alignWithParentIfMissing="true"
android:layout_gravity="bottom"
android:layout_toStartOf="@id/filterContainer"
android:layout_toLeftOf="@id/filterContainer"
android:clipChildren="false"
app:tabGravity="center"
app:tabIndicatorColor="#FFF"
app:tabIndicatorHeight="3dp"
app:tabMode="scrollable" />
<RelativeLayout
android:id="@+id/filterContainer"
android:layout_width="?attr/actionBarSize"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:clipChildren="false">
<android.support.design.widget.FloatingActionButton
android:id="@+id/filterButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:elevation="2dp"
android:scaleType="centerInside"
android:tooltipText="Filter"
app:elevation="2dp"
app:fabSize="mini"
app:srcCompat="@android:drawable/btn_default"
tools:targetApi="o" />
</RelativeLayout>
</RelativeLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior" />
</android.support.design.widget.CoordinatorLayout>
和viewpager片段xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:card_view="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
android:clipToPadding="false"
android:paddingTop="6dp"
android:paddingBottom="8dp"
android:scrollbars="none"
app:fastScrollEnabled="true"
app:layoutManager="android.support.v7.widget.LinearLayoutManager" />
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>