您的位置:首页 > 其它

ScrollView嵌套GridView、ListView

2015-07-24 17:17 501 查看
最近使用ScrollView嵌套GridView发现总是只显示一行数据, 对布局调了好久都无济于事。 后来查阅资料才发现官网上并不推荐这种做法, 因为GridView和ListView本事都是自带滚动条的, 在加上一个滚动条并不符合要求。 最后通过网络大牛解决了这个问题

ListView

在适配ListView的内容后调用这个方法可以解决单行显示的问题, 通过适配子项总数来设置了ListView的高度,但在listView加了图片之后效果却没有实现

public void setListViewHeightBasedOnChildren(ListView listView) {
// 获取ListView对应的Adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}

int totalHeight = 0;
for (int i = 0, len = listAdapter.getCount(); i < len; i++) {
// listAdapter.getCount()返回数据项的数目
View listItem = listAdapter.getView(i, null, listView);
// 计算子项View 的宽高
listItem.measure(0, 0);
// 统计所有子项的总高度
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
// listView.getDividerHeight()获取子项间分隔符占用的高度
// params.height最后得到整个ListView完整显示需要的高度
listView.setLayoutParams(params);
}


后来查询资料再一次的解决了上诉的问题

通过自定义控件中重写onMeasur方法设置listview没有滚动条 , 在GridView也是同样的道理

public class ListView1 extends ListView {

public ListView1(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub

int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: