private int getMsgListViewHeight() { int totalHeight = 0; ListAdapter listAdapter = mMessageCenterLv.getAdapter(); if (listAdapter == null) { return totalHeight; } int height = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, mMessageCenterLv); int desiredWidth = View.MeasureSpec.makeMeasureSpec(mMessageCenterLv.getWidth(), View.MeasureSpec.AT_MOST); listItem.measure(desiredWidth, 0); height += (listItem.getMeasuredHeight()); } totalHeight = height + (mMessageCenterLv.getDividerHeight() * (listAdapter.getCount() - 1)); return totalHeight; } 在设置没有起作用的时候,检查如下方面: 1、适配器中inflate最好使用如下方式:inflate(R.layout.message_list_item, parent, false);
2、如果每个item的高度是固定高度,在布局文件中,高度值最好不写在布局的最顶层。
另一种方法,重写ListView:public class ExpandListView extends ListView { public ExpandListView(Context context) { super(context); } public ExpandListView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
动态计算Listview高度
最新推荐文章于 2021-05-26 03:45:32 发布