ScrollView嵌套ListView导致ListView只显示一行
众所周知,在LinerLayout中布局listview,当listview的行数超过屏幕的显示高度时,listview会自动生成滚动条,可以滚动显示信息。不过,当我们希望listview随着整个LinerLayout的滚动而显示,而非独自滚动时,我们可以将listview放在ScrollView里面,不过这么做的时候发现listview只显示一行。为什么会这样呢?
查阅各种资料之后发现,是因为ScrollView无法计算listview的高度。既然如此,我们就手动计算listview的高度,通过如下代码即可实现:
private void setListViewHeight(ListView listView){ ListAdapter listAdapter=listView.getAdapter(); if(listAdapter==null) return; int height=0; int length=listAdapter.getCount(); for(int i=0;i<length;i++){ View itemView=listAdapter.getView(i,null,listView); //计算子项itemView的宽高 itemView.measure(0,0); height+=itemView.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = height+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);}// listView.getDividerHeight()获取子项间分隔符占用的高度
当我们设置了listview的Adapter之后,再随后加上此方法,将listview作为参数传入即可