隐藏工具栏滚动与片段内的recyclerview

Orb*_*bit 26 android android-layout android-toolbar android-coordinatorlayout android-appbarlayout

当滚动片段内的recyclerview时,我正试图让工具栏在滚动时折叠.首先,继承我的主要布局:

<DrawerLayout>

     <RelativeLayout
        android:id="@+id/mainRelativeLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

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

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

                <Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    android:elevation="5dp"
                    app:layout_scrollFlags="scroll|enterAlways"
                    >

                </Toolbar>

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

            <FrameLayout
                android:id="@+id/container"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                />

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

    </RelativeLayout>

<!-- ignore -->
<drawercontents>
</DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

所以你可能猜到我的片段被加载进去了@id/container.我的第一个片段包含recyclerview,我设置app:layout_behavior="@string/appbar_scrolling_view_behavior"了recyclelerview.这确实有效,工具栏在滚动时折叠.问题是工具栏覆盖了片段未折叠时的顶部内容.在片段容器中添加一个等于工具栏大小的上边距只会在工具栏崩溃时(显然)导致留下空白.

什么不见​​了?有任何想法吗?

编辑:根据要求,这是包含recyclerview的片段的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.RecyclerView
    android:id="@+id/feed"
    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="#00000000"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
Run Code Online (Sandbox Code Playgroud)

小智 9

<?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.support.design.widget.AppBarLayout
        android:id="@+id/tabanim_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/tabanim_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways|snap"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

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

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)


pav*_*vle 6

-您可以通过增加第三个标志解决这个问题snap,以layout_scrollFlags财产。

<Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:elevation="5dp"
    app:layout_scrollFlags="scroll|enterAlways|snap" />
Run Code Online (Sandbox Code Playgroud)

使用此选项将确定当视图仅部分缩小时要执行的操作。如果滚动结束并且视图大小已减小到其原始大小的 50% 以下,则此视图将返回到其原始大小。如果尺寸大于其尺寸的 50%,它将完全消失。

检查此链接


adh*_*han 5

尚未对此进行测试,但这是您必须执行的操作:

  • 将 移动app:layout_behavior="@string/appbar_scrolling_view_behavior"FrameLayoutid container
  • 添加android:fitsSystemWindows = "true"到您的AppBarLayout.

这正是我在我的应用程序中所做的,并且它有效。如果这对您不起作用,请尝试清理(在 Android Studio 上,Build -> Clean Project)您的项目并再次运行该应用程序。


Par*_*dik -1

在你的框架布局集中

android:layout_below="@+id/appBarLayout"
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试以下操作:

android:layout_below="@+id/toolbar"
Run Code Online (Sandbox Code Playgroud)

  • `android:layout_below` 可以与 `RelativeLayout` 的子级一起使用。“CoordinatorLayout”基本上是“FrameLayout”的高级版本,因此它不执行任何操作。 (2认同)