工具栏下的GridView - 滚动时隐藏工具栏

时间:2015-03-21 11:27:56

标签: android gridview toolbar material-design

我的活动有以下布局:

<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中滚动,工具栏就会出现/消失动画:

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());
        }

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

附录:

我已经为我的Activity尝试了RelativeLayout以及LinearLayout而不是FrameLayout,但这不是一个解决方案,我遇到了另一个问题https://stackoverflow.com/questions/29163698/hiding-toolbar-when-scrolling-layout-under-toolbar-does-not-disapear

2 个答案:

答案 0 :(得分:2)

尝试将FrameLayout更改为LinearLayout,方向为vertical。 然后Gridview将放在工具栏旁边。

答案 1 :(得分:1)

您可以向GridView添加一个空标题,该标题会隐藏在您的自定义标题下,以提供所需的间距。由于标准GridView不支持标题,因此您需要使用HeaderGridView。我已经多次使用过这个小部件了,它总是运行良好。

由于您使用的是SwipeRefreshLayout,因此您还需要调整其进度视图位置。根据{{​​3}},可以使用this answer完成此操作。