包含小于屏幕高度的内容的NestedScrollView在CoordinatorLayout

时间:2015-09-18 09:51:56

标签: android android-viewpager android-coordinatorlayout

我正在尝试使用Material Design实现ActionBar滚动内容行为。

我试图在包含SlidingTabLayoutViewPager作为AppBarLayout的直接兄弟的网页上进行此操作。通过将app:layout_behavior="@string/appbar_scrolling_view_behavior"添加到ViewPager

,我已达到当前状态

这导致了两种出乎意料的行为:

1)当Fragment内容小于屏幕高度时,仍会出现垂直滚动(AppBarLayout内容不应滚动,如果它的邻居不滚动)。

2)当滚动触摸事件在可触摸的子元素上开始时,滚动不会发生修改:此问题在Issue 182549

中进行了描述

你可以在这个gif上看到Page0上的第一个ScrollEvent显示问题1,而第0页上的第二个滚动显示问题2.(奇怪的是,问题2在第1页上显然不明显。)

enter image description here

我创建了一个完整的演示项目,你可以在GitHub上找到它,它展示了这个bug:https://github.com/gwoodhouse/TestApplication

为了快速参考,我的活动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"
                                                 android:layout_width="match_parent"
                                                 android:layout_height="match_parent"
                                                 android:background="@color/teal"
                                                 android:orientation="vertical">


    <android.support.design.widget.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="?android:attr/actionBarSize"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            android:background="@color/teal"
            app:layout_scrollFlags="scroll|enterAlways"/>

        <com.example.graemecastle.testapplication.SlidingTabLayout
            android:id="@+id/slidingTabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/background"
            app:layout_scrollFlags="scroll|enterAlways"/>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>


</android.support.design.widget.CoordinatorLayout>

My Fragments XML如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:orientation="vertical">

        <android.support.v7.widget.CardView
            android:layout_margin="16dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            app:cardBackgroundColor="@color/green"
            app:cardElevation="2dp">

            <LinearLayout

                android:layout_width="wrap_content"
                android:layout_height="?android:attr/actionBarSize"
                android:background="?android:attr/selectableItemBackground"
                android:clickable="true"
                android:gravity="center_vertical"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="16dp"
                    android:text="Button"
                    android:textColor="#FFFFFF"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="8dp"
                    android:layout_marginRight="16dp"
                    android:text=">"
                    android:textColor="#FFFFFF"/>
            </LinearLayout>
        </android.support.v7.widget.CardView>

        <!-- Extra Buttons Added Here to show how view's which should scroll scroll correctly -->
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>

到目前为止,捕获onInterceptTouchEvent()并未向我说明发生了什么。有没有人有任何想法?

0 个答案:

没有答案