【问题标题】:how to calculate listview height of different height listitem in android?如何计算android中不同高度listitem的listview高度?
【发布时间】:2017-05-30 23:19:57
【问题描述】:

此代码有效,但问题在于 ListView 中的每个 ListView 项目都是不同的,因此 ListView 的最后一项不显示,因为大高度 ListView 项目获得了这个空间。

代码如下:

public static void setListViewHeightBasedOnChildren(ListView listView,DownloadAdapter adapter,LinearLayout layDownloads) {

ListAdapter mAdapter = adapter;

    int totalHeight = 0,h=0;
    int listWidth=listView.getMeasuredWidth();

    for (int i = 0; i < mAdapter.getCount(); i++) {
        View mView = mAdapter.getView(i, null, listView);

    mView.measure(
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        h=mView.getMeasuredHeight();
        totalHeight += mView.getMeasuredHeight();

    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (mAdapter.getCount() - 1))+h;
    listView.setLayoutParams(params);
    listView.requestLayout();

}

这是屏幕

请帮助我如何获取每个单元格的列表视图的高度并计算列表视图的高度? 提前谢谢..

【问题讨论】:

  • 您可以在滚动视图中使用listview向下滚动并查看所有项目
  • 我在滚动视图中的列表视图,但问题是,在我的屏幕上,有 3 个线性布局,每个都有差异列表视图,这就是为什么我必须动态设置每个列表视图高度,所以我使用这种方法来设置高度列表视图。
  • 为什么不考虑这个解决方案:让您的项目与显示摘要的默认大小相同,然后单击展开特定项目?
  • 不,我不会显示整行列表

标签: android listview android-listview


【解决方案1】:

你的函数替换为

public static void getTotalHeightofListView(ListView listView) {

    ListAdapter mAdapter = listView.getAdapter();

    int totalHeight = 0;
    int listWidth = listView.getMeasuredWidth();

    for (int i = 0; i < mAdapter.getCount(); i++) {
        View mView = mAdapter.getView(i, null, listView);

        mView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

        totalHeight += mView.getMeasuredHeight();
        Log.w("HEIGHT" + i, String.valueOf(totalHeight));

    }

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

【讨论】:

  • 对我来说就像一个魅力! (我确实在卡片视图中有一个列表视图)
【解决方案2】:

回答 用这个

mView.measure(MeasureSpec.makeMeasureSpec(listWidth, MeasureSpec.EXACTLY),MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

在你的代码上

mView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

【讨论】:

  • 再次尝试先从 (listWidth, MeasureSpec.EXACTLY) 替换给定的代码(0, MeasureSpec.UNSPECIFIED)
  • 它给列表视图行的高度为 0
  • 发布您的完整代码并通过更改代码再次获取它在我的工作正常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
相关资源
最近更新 更多