为了账号安全,请及时绑定邮箱和手机立即绑定

如何将GridView放入ScrollView

如何将GridView放入ScrollView

米琪卡哇伊 2019-11-27 14:25:24
我必须设计布局以使整个布局都可以滚动,而内部布局则必须以Grid表格形式显示相关内容,因此我决定使用GridView。但是问题是我无法在GridView内部使用ScrollView我已经阅读了文档(文档也说我们应该也不要GridView在内部使用ScrollView)。但是我必须这样做,所以可以给我一些想法。谢谢
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

除了固有的滚动之外,GridView绝对有很多好处。例如,一致,动态的单元格布局将根据您传递到其中的数据进行扩展和收缩。因此,当人们说想要这样的功能不好时,我认为这是错误的,因为您可能希望将动态图像网格(视图)放在滚动视图中,但希望整个滚动视图包含除网格之外的其他内容细胞。


现在,这是您可以执行的操作。在这里检查答案。它是一个可扩展的高度GridView,您将要在项目中导入/创建它。基本上,这意味着随着向GridView中添加更多项,它只会扩展其高度,而不是保持其高度设置并使用滚动。这正是您想要的。


在项目中拥有ExpandableHeightGridView之后,转到您想要GridView放置的XML布局。然后,您可以执行以下操作(解释):


<ScrollView ...>

    <RelativeLayout ...>

        <com.example.ExpandableHeightGridView ... />

        <other view items />

    </RelativeLayout>

</ScrollView>

然后,在您设置GridView适配器的活动中,您要确保将其设置为可扩展。所以:


ExpandableHeightGridView gridView = (ExpandableHeightGridView) findViewById(R.id.myId);

gridView.setAdapter(yourAdapter);

gridView.setExpanded(true);

您需要此可扩展GridView的原因是,标准GridView不能扩展是导致滚动的原因。它会坚持到一定的高度,然后随着更多的项目超出其视图范围,它将变得可滚动。现在,有了这个,您的GridView将始终扩大其高度以适合其中的内容,从而从不允许它进入其滚动模式。这使您可以在ScrollView中使用它,并在ScrollView中使用它之上或之下的其他视图元素,并使它们全部滚动。


这应该为您提供所需的结果。如果您有任何疑问,请告诉我。


查看完整回答
反对 回复 2019-11-27
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

我知道我来晚了,但是我有另一个解决方案,我必须分享并且可以完美地工作。在此,该方法根据其包含的项数来计算GridView的高度,并在运行时将其设置为GridView的高度。


public void setGridViewHeightBasedOnChildren(GridView gridView, int columns) {

        ListAdapter listAdapter = gridView.getAdapter(); 

        if (listAdapter == null) {

            // pre-condition

            return;

        }


        int totalHeight = 0;

        int items = listAdapter.getCount();

        int rows = 0;


        View listItem = listAdapter.getView(0, null, gridView);

        listItem.measure(0, 0);

        totalHeight = listItem.getMeasuredHeight();


        float x = 1;

        if( items > columns ){

            x = items/columns;

            rows = (int) (x + 1);

            totalHeight *= rows;

        }


        ViewGroup.LayoutParams params = gridView.getLayoutParams();

        params.height = totalHeight;

        gridView.setLayoutParams(params);


}

调用setAdaptergridview之后,只需调用


setGridViewHeightBasedOnChildren( <yourGridView> , <no of grid view columns> )

它会工作。


您可以像平常一样在xml中定义gridview


并让代码来处理它。:)


查看完整回答
反对 回复 2019-11-27
  • 3 回答
  • 0 关注
  • 508 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信