如何将GridView放入ScrollView

我必须设计布局以使整个布局都可以滚动,而内部布局则必须以Grid表格形式显示相关内容,因此我决定使用GridView。但是问题是我无法在GridView内部使用ScrollView我已经阅读了文档(文档也说我们应该也不要GridView在内部使用ScrollView)。但是我必须这样做,所以可以给我一些想法。谢谢



米琪卡哇伊
浏览 510回答 3
3回答

Cats萌萌

除了固有的滚动之外,GridView绝对有很多好处。例如,一致,动态的单元格布局将根据您传递到其中的数据进行扩展和收缩。因此,当人们说想要这样的功能不好时,我认为这是错误的,因为您可能希望将动态图像网格(视图)放在滚动视图中,但希望整个滚动视图包含除网格之外的其他内容细胞。现在,这是您可以执行的操作。在这里检查答案。它是一个可扩展的高度GridView,您将要在项目中导入/创建它。基本上,这意味着随着向GridView中添加更多项,它只会扩展其高度,而不是保持其高度设置并使用滚动。这正是您想要的。在项目中拥有ExpandableHeightGridView之后,转到您想要GridView放置的XML布局。然后,您可以执行以下操作(解释):<ScrollView ...>&nbsp; &nbsp; <RelativeLayout ...>&nbsp; &nbsp; &nbsp; &nbsp; <com.example.ExpandableHeightGridView ... />&nbsp; &nbsp; &nbsp; &nbsp; <other view items />&nbsp; &nbsp; </RelativeLayout></ScrollView>然后,在您设置GridView适配器的活动中,您要确保将其设置为可扩展。所以:ExpandableHeightGridView gridView = (ExpandableHeightGridView) findViewById(R.id.myId);gridView.setAdapter(yourAdapter);gridView.setExpanded(true);您需要此可扩展GridView的原因是,标准GridView不能扩展是导致滚动的原因。它会坚持到一定的高度,然后随着更多的项目超出其视图范围,它将变得可滚动。现在,有了这个,您的GridView将始终扩大其高度以适合其中的内容,从而从不允许它进入其滚动模式。这使您可以在ScrollView中使用它,并在ScrollView中使用它之上或之下的其他视图元素,并使它们全部滚动。这应该为您提供所需的结果。如果您有任何疑问,请告诉我。

梵蒂冈之花

我知道我来晚了,但是我有另一个解决方案,我必须分享并且可以完美地工作。在此,该方法根据其包含的项数来计算GridView的高度,并在运行时将其设置为GridView的高度。public void setGridViewHeightBasedOnChildren(GridView gridView, int columns) {&nbsp; &nbsp; &nbsp; &nbsp; ListAdapter listAdapter = gridView.getAdapter();&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; if (listAdapter == null) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // pre-condition&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; int totalHeight = 0;&nbsp; &nbsp; &nbsp; &nbsp; int items = listAdapter.getCount();&nbsp; &nbsp; &nbsp; &nbsp; int rows = 0;&nbsp; &nbsp; &nbsp; &nbsp; View listItem = listAdapter.getView(0, null, gridView);&nbsp; &nbsp; &nbsp; &nbsp; listItem.measure(0, 0);&nbsp; &nbsp; &nbsp; &nbsp; totalHeight = listItem.getMeasuredHeight();&nbsp; &nbsp; &nbsp; &nbsp; float x = 1;&nbsp; &nbsp; &nbsp; &nbsp; if( items > columns ){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x = items/columns;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rows = (int) (x + 1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; totalHeight *= rows;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ViewGroup.LayoutParams params = gridView.getLayoutParams();&nbsp; &nbsp; &nbsp; &nbsp; params.height = totalHeight;&nbsp; &nbsp; &nbsp; &nbsp; gridView.setLayoutParams(params);}调用setAdaptergridview之后,只需调用setGridViewHeightBasedOnChildren( <yourGridView> , <no of grid view columns> )它会工作。您可以像平常一样在xml中定义gridview并让代码来处理它。:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android