3 回答
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中使用它之上或之下的其他视图元素,并使它们全部滚动。
这应该为您提供所需的结果。如果您有任何疑问,请告诉我。
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
并让代码来处理它。:)
- 3 回答
- 0 关注
- 508 浏览
添加回答
举报