标题有点怪怪的,正常的listview在item内容高度大于listview高度时会出现上下滚动的样式,本文是因为使用了ScrollView,导致listview只能显示一个item的高度,所以为了消除这个不好得体验,我们需要将listview的滚动清除,只保留ScrollView的滚动即可。下面是正常状态下没有使用自适应高度的样子:
然后使用如下代码,实现自动调整listview的高度,达到撑开listview的目的。我这里因为有底部导航,所以使用了像素转换,底部导航高度50dp。
//自适应高度 public 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))+dp2px(getActivity(),50); ((ViewGroup.MarginLayoutParams) params).setMargins(10, 10, 10, 10); // 可删除 listView.setLayoutParams(params); } //像素转换dp到px private int dp2px(Context context,float dpValue){ float scale=context.getResources().getDisplayMetrics().density; return (int)(dpValue*scale+0.5f); }
只需要传入listview即可自适应高度,但是必须在adapter装载了数据之后执行方法才行,每次更新数据也要执行这个方法!效果如下:
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/242176.html