让代码更简单

安卓listview撑开自适应高度

重要:本文最后更新于2022-11-08 19:26:09,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

标题有点怪怪的,正常的listview在item内容高度大于listview高度时会出现上下滚动的样式,本文是因为使用了ScrollView,导致listview只能显示一个item的高度,所以为了消除这个不好得体验,我们需要将listview的滚动清除,只保留ScrollView的滚动即可。下面是正常状态下没有使用自适应高度的样子:

安卓listview撑开自适应高度

安卓listview撑开自适应高度

然后使用如下代码,实现自动调整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装载了数据之后执行方法才行,每次更新数据也要执行这个方法!效果如下:

安卓listview撑开自适应高度

安卓listview撑开自适应高度

感觉很棒!可以赞赏支持我哟~

3 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐