7

我有: 1.Coordinator 布局 2.appbar 布局(协调器布局的子级) 3.Collapsing 工具栏布局(应用程序栏的子级) 4.NestedScrollView (协调器的子级)

我想在里面放一个网格视图,NestedScrollView以便用户可以滚动整个屏幕空间。

我的问题是,目前 gridview 占据了该部分的一小部分NestedScrollView而不是全部空间NestedScrollView并在该部分内滚动,如下图所示:

在此处输入图像描述

如您所见,我的gridview高度仅限于天蓝色突出显示的部分,我希望它占据该图像下方的整个屏幕空间(这是我的折叠工具栏)。我尝试了不同的方法,但没有任何效果。我的 xml 文件是:

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:id="@+id/app_bar"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="196dp"
        android:background="#3f51b5"
        app:contentScrim="@color/colorPrimary"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">


        <ImageView
            android:id="@+id/imageview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop"
            android:src="@drawable/index"
            app:layout_collapseMode="parallax" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <GridView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="1dp"
        android:layout_marginRight="1dp"

        android:id="@+id/gridView"
        android:verticalSpacing="1dp"
        android:horizontalSpacing="1dp"
        android:numColumns="2"
        android:stretchMode="columnWidth"/>

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

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right|bottom"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_dialog_email" />

4

4 回答 4

15

GridView已经内置了滚动功能,因此它与NestedScrollView. 您应该使用RecyclerView带有 aGridLayoutManagerappbar_scrolling_view_behavior布局行为的NestedScrollView.

于 2015-10-26T02:17:27.570 回答
14

好吧,我遇到了同样的问题,以下对我有用。

<android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:fillViewport="true">
于 2016-06-04T06:03:49.813 回答
8

确实,与GridView冲突的 NestedScrollView正确解决方案RecyclerView使用/2591977GridView

然后你只需GridView要用自定义类替换你的,并NestedScrollView在 Apoorv 的答案中设置参数:

<android.support.v4.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    android:fillViewport="true">
于 2018-08-31T19:23:36.463 回答
3

Apoorv Singh 的回答帮助了我,但并不完全。您可以将 GridView 放在 NestedScrollView 中,但只会显示第一行。您需要android:fillViewport="true"在 NestedScrollView 定义内部添加,以便所有内容都能正确显示。

但是,当我向下滚动时,它不会滚动到屏幕底部。我有一个 10 行的网格,屏幕上没有多行,但我现在无法向下滚动查看它们。

答:这对我有用。将 RecyclerView 与 GridLayoutManager 一起使用,而不是 GridView。由于回收站视图也与折叠工具栏兼容。当你在 NestedScrollView 中使用 RecyclerView 时,它运行良好。一切尺寸正确,滚动正确。

于 2017-11-18T00:23:21.073 回答