Toolbar下的GridView——滚动时隐藏ToolBar

GridView under Toolbar - Hide ToolBar when Scrolling

我的 Activity 布局如下:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

    <include layout="@layout/toolbar" />

</FrameLayout>

content_fragment 是我替换包含 gridView 的片段的地方:

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/swipe_refresh_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context="com.test.android.client.fragment.BurgerGridFragment">

        <GridView
            android:id="@+id/grid"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clipToPadding="false"
            android:columnWidth="150dp"
            android:horizontalSpacing="@dimen/margin_extra_small"
            android:numColumns="auto_fit"
            android:padding="@dimen/padding_extra_small"
            android:scrollbars="none"
            android:stretchMode="columnWidth"
            android:verticalSpacing="@dimen/margin_extra_small" />

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

我的想法是,只要我在 GridView 中滚动,工具栏就应该 appears/disappears 带有动画:

if (shown) {


view.animate()
                    .translationY(0)
                    .alpha(1)
                    .setDuration(HEADER_HIDE_ANIM_DURATION)
                    .setInterpolator(new DecelerateInterpolator());
        } else {
            view.animate()
                    .translationY(-view.getBottom())
                    .alpha(0)
                    .setDuration(HEADER_HIDE_ANIM_DURATION)
                    .setInterpolator(new DecelerateInterpolator());
        }

问题是第一个网格项与工具栏部分重叠。 你知道如何解决这个问题吗?

附录:

我已经为我的 Activity 尝试了 RelativeLayout 和 LinearLayout 而不是 FrameLayout,但这不是解决方案,我遇到了另一个问题

您可以向 GridView 添加一个空的 header,它将隐藏在您的自定义 header 下,以提供所需的间距。由于标准 GridView 不支持 header,您需要使用 HeaderGridView。这个插件我已经用过好几次了,一直很好用。

由于您正在使用 SwipeRefreshLayout,因此您还需要调整其进度视图位置。根据this answer this can be done with setProgressViewOffset().

尝试将 FrameLayout 更改为垂直方向的 LinearLayout。 然后 Gridview 将放置在工具栏下方。