1,ScrollView里面的listView高度无法算出来,通常只能显示listview的其中一行
2,listview列表不能滚动
解决方法:
1,在设置完ListView的Adapter后,根据ListView的子项目重新计算ListView的高度,然后把高度再作为LayoutParams设置给ListView,这样它的高度就正确显示了。
代码如下:
- public class ListViewUtility {
-
- public static void setListViewHeightBasedOnChildren(ListView listView){
- ListAdapter listAdapter = listView.getAdapter();
- if (listAdapter==null){
- return;
- }
- int totalHeight = 0;
- for (int i=0;i<listAdapter.getCount();i++){
- View listItem = listAdapter.getView(i, null, listView);
- listItem.measure(0, 0);
- totalHeight += listItem.getMeasuredHeight();
- }
- ViewGroup.LayoutParams params = listView.getLayoutParams();
- params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
- listView.setLayoutParams(params);
- }
- }
参考:http://blog.csdn.net/hitlion2008/article/details/6737459
2,解决方法二:
自定义Listview,并且重写其onMeasure()方法
代码如下:
public class MyListView extends ListView{
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec
,MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST));
}
}
- @Override
-
-
-
-
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, expandSpec);
- }
原本地址: http://blog.csdn.net/kkijhuybjju/article/details/53151006