如何强制ListView的高度大小,以便每一行都可见?

4

我有一个嵌套的listView。如何强制listView的高度大小,以便每一行都可见? ListView嵌套在ScrollView中,因此滚动对于ListView不起作用,所以我需要使所有项都在ListView中可见,而ListView又嵌套在ScrollView中(上下方还有更多的内容)。


5
在这种情况下,您不应该使用ListView。一个普通的垂直LinearLayout和对ListAdapter#getView的重复调用 - 然后将其添加到LinearLayout中(只需记得添加点击监听器)。 - Jens
在ScrollView中使用ListView不是很高效。请重新考虑您的UI设计。 - Mbt925
你实现了这个吗? - Salmaan
2个回答

4

计算ListView的高度

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = 0;
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(),
            MeasureSpec.AT_MOST);
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED);
        totalHeight += listItem.getMeasuredHeight();
    }

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

将列表视图对象传递给此方法。
 setListViewHeightBasedOnChildren(listView)

我已经更改了 totalHeight += (listItem.MeasuredHeight+45) ,现在它可以工作了,但我知道这不是一个好的解决方案。 - Nininea
我看到的版本使用'listItem.measure(0, 0);',但在使用修改后的DPI值的手机上返回一个显著较大的高度。 - Abandoned Cart
即使这是一个旧答案,我仍想指出这不起作用。它可能会返回非常大的结果,例如1050。 - Sixro
经过10年的撰写答案,我在此确认您不应该在任何此类需求中使用listview或recyclerview。如果项目数量在运行时决定,则应该考虑为什么需要一次性在一个屏幕上显示所有项目而不滚动? - Pankaj

0

你可以使用这段代码。listview 包含这个属性。

android:minheight="20dp";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接