我的活动有以下布局:
<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
答案 0 :(得分:2)
尝试将FrameLayout更改为LinearLayout,方向为vertical。 然后Gridview将放在工具栏旁边。
答案 1 :(得分:1)
您可以向GridView
添加一个空标题,该标题会隐藏在您的自定义标题下,以提供所需的间距。由于标准GridView
不支持标题,因此您需要使用HeaderGridView
。我已经多次使用过这个小部件了,它总是运行良好。
由于您使用的是SwipeRefreshLayout
,因此您还需要调整其进度视图位置。根据{{3}},可以使用this answer完成此操作。