gridview中嵌套的scrollview只占用了一部分

时间:2015-10-26 01:50:46

标签: android gridview nestedscrollview

我有: 1.协调员布局 2.appbar布局(协调器布局的子代) 3.Collapsing工具栏布局(app栏的子项) 4.NestedScrollView(协调员的孩子)

我希望将网格视图放在NestedScrollView中,以便用户可以滚动整个屏幕空间。

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

enter image description here

正如您所看到的,我的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 个答案:

答案 0 :(得分:12)

GridView已内置滚动条,因此与NestedScrollView冲突。您应该使用RecyclerView GridLayoutManagerappbar_scrolling_view_behavior布局行为代替NestedScrollView

答案 1 :(得分:11)

我有同样的问题,以下对我有用。

<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">

答案 2 :(得分:4)

是的,GridViewNestedScrollView冲突,正确的解决方案是使用RecyclerView,但是我需要一种快速的解决方法来进行设置,并且遇到了一个解决方案使用扩展GridView的自定义类: https://gist.github.com/jiahuang/2591977

然后,您只需要用自定义类替换GridView并按照Apoorv的答案设置NestedScrollView的参数即可:

<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">

答案 3 :(得分:2)

Apoorv Singh's answer帮助了我,但并不完全。您可以将GridView放在NestedScrollView中,但只显示第1行。您需要在NestedScrollView定义中添加android:fillViewport="true",以便正确显示所有内容。

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

答案: 这对我来说很有用。使用RecyclerView和GridLayoutManager而不是GridView。由于Recycler视图也与Collapsing工具栏兼容。当您在NestedScrollView中使用RecyclerView时,它运行良好。一切都正确,并正确滚动。