ListView根据内容适配显示高度

Posted by JamesPxy on 2017-07-16

由于listview的onMeasure()的测量模式,当内容不足以占满父类高度时,无论设置wrap_content还是match_parent都无法满足预期控制对应高度,于是需要在匹配数据后动态设置其高度。计算代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  public static void setListViewHeightBasedOnChildren(final 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();
}

final ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}

注意事项:

  • 对应listview布局的父布局或者说根布局必须为linearlayout,否则次方法设置无效,具体原因还是因为RV和LV的onMeasure()方法不同导致,因为这个坑,浪费了大半天时间,这里特别标注,之后遇到就不会再被坑了。

  • 继续深入学习推荐鸿洋大神的 Android LayoutInflater深度解析 给你带来全新的认



支付宝打赏 微信打赏

赞赏一下