CoordintatorLayout-AppBar和布局中的可滚动内容

时间:2019-05-17 08:27:00

标签: android android-recyclerview android-coordinatorlayout android-collapsingtoolbarlayout android-appbarlayout

我正在基于CoordinatorLayout创建一个视图。该视图包含两个元素:View中的CollapsingToolbarLayoutRecyclerView作为内容。整个内容也包装在SwipleRefreshLayout中-向上滚动存在问题,但很容易解决(通过OnOffsetChangedListener中的AppBar

我的问题是,CollapsingToolbarLayout中的视图可能比屏幕更高(非常罕见,但可能),因此它必须是可滚动的。

请参见以下示例:

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

    <android.support.design.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
                android:id="@+id/app_bar_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

            <android.support.design.widget.CollapsingToolbarLayout
                    android:id="@+id/collapsing_toolbar_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <View android:id="@+id/very_big_height"
                      android:layout_width="match_parent"
                      android:background="@color/design_default_color_primary"
                      android:layout_height="2000dp"/>

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

        <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/dummy_recycler_view"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

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

当我通过AppBar滚动时,可以将布局设置为以下状态: unexpected behaviour example on device

蓝色区域的ID为very_big_height,而白色区域实际上是屏幕上的空白区域,因为我的RecyclerView的高度为wrap_content,内部没有物品。

我仍然可以通过蓝色区域滚动AppBar,甚至可以将其完全滚动到屏幕外部。而且,如果我过度滚动它,就无法再次看到它。

我的预期行为是: AppBar应该仅滚动到屏幕底部。如果下面没有内容,则不应隐藏。 另外,如果内容适合屏幕,则AppBar不应是可滚动的(我已经建立了在没有内容时禁用滚动的解决方案,但是当AppBar不适合屏幕时,则无法使用滚动条。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

滚动问题是由父视图SwipetoRefreshLayout引起的,您的xml的根视图应该是CoordinatorLayout

我不知道使用SwipetoRefreshLayout的目的是什么,但是如果滚动元素过多,可能会导致滚动体验变差

答案 1 :(得分:0)

第一个CoordinatorLayout无法将滚动事件发送到SwipeRefreshLayout。您可以在ChildCoordinatorLayout

中尝试代码

第二,您可以设置RecyclerView匹配父项。