最近作的一个项目中出现了须要显示内容加留言的需求,就像微信朋友圈那样,内容下方要显示用户的留言信息,第一时间想到l了ListView嵌套ListView的显示方式,但实际操做中发现,嵌套后若是不给子项的ListView设置高度,显示的时候子项的ListView是不会显示的,后来在网上找到了一种方法,计算子项的高度:java
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); }
此方法能够根据你设置的adapter动态计算出各个子项的高度,可是实际应用时发现,当ListView的每项留言都只有一行时。此方法显示正常,但是要是有一条的留言须要占用1行以上的高度,此方法所计算出的高度就会与实际要显示的内容高度不一致 后来经过继承ListView,并重写onmesure方法解决了子项留言显示的问题, onmesure重写方法以下:微信
<!-- lang: java --> @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }
关于MeasureSpec的介绍可浏览这篇博文:http://blog.csdn.net/kaixinbingju/article/details/8649218ide