如何计算android中listView的总行高?

如何计算android中listView的总行高?,android,listview,Android,Listview,我使用此代码获取listview行项目的总高度,但它没有返回实际高度。这是使用过的代码 public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition

我使用此代码获取listview行项目的总高度,但它没有返回实际高度。这是使用过的代码

public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter(); 
        if (listAdapter == null) {
            // pre-condition
            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));
        listView.setLayoutParams(params);
        listView.requestLayout();
    }
public static void setListViewHeightBasedOnChildren(ListView ListView){
ListAdapter ListAdapter=listView.getAdapter();
如果(listAdapter==null){
//前提条件
返回;
}
int totalHeight=0;
对于(int i=0;i
例如:我有一个20行的listview,假设200300500,每行的高度不同。当我使用上述代码时,它并没有为我返回实际高度。我也试过这个答案: 但没有起作用。我怎样才能解决这个问题。有人能解释这个解决方案吗

View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
该函数的核心是这三条线,它尝试测量每个视图。listItem.measure(0,0)中的0等于
MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED)

它通常会计算listview的准确高度。有一个例外,当视图内容太多并且将换行时,即有太多的文本行。在这种情况下,您应该指定一个精确的widthSpec来测量()。因此,将
listItem.measure(0,0)
更改为

// try to give a estimated width of listview
int listViewWidth = screenWidth - leftPadding - rightPadding; 
int widthSpec = MeasureSpec.makeMeasureSpec(listViewWidth, MeasureSpec.AT_MOST);
listItem.measure(listViewWidth, 0)
在这里更新公式

int listViewWidth = screenWidth - leftPadding - rightPadding; 
这只是一个示例,说明了如何估计listview的宽度,该公式基于以下事实:
listview的宽度≈ 屏幕宽度
。填充由您自己设置,这里可能为0。说明如何获取屏幕宽度。 一般来说,这只是一个示例,您可以在这里编写自己的公式

该函数的核心是这三条线,它尝试测量每个视图。listItem.measure(0,0)中的0等于
MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED)

它通常会计算listview的准确高度。有一个例外,当视图内容太多并且将换行时,即有太多的文本行。在这种情况下,您应该指定一个精确的widthSpec来测量()。因此,将
listItem.measure(0,0)
更改为

// try to give a estimated width of listview
int listViewWidth = screenWidth - leftPadding - rightPadding; 
int widthSpec = MeasureSpec.makeMeasureSpec(listViewWidth, MeasureSpec.AT_MOST);
listItem.measure(listViewWidth, 0)
在这里更新公式

int listViewWidth = screenWidth - leftPadding - rightPadding; 
这只是一个示例,说明了如何估计listview的宽度,该公式基于以下事实:
listview的宽度≈ 屏幕宽度
。填充由您自己设置,这里可能为0。说明如何获取屏幕宽度。
一般来说,这只是一个示例,您可以在这里编写自己的公式

你需要总高度有什么原因吗?如果列表很大,此方法的性能会很差。是否尝试了listItem.getHeight()?当你使用另一个答案时,出了什么问题?@Samuel实际上我必须在listview中显示评论列表。当行号为15或更高时,它不会返回实际高度,但如果行号为1到5,则它工作正常。我必须在视频视图下显示评论,这就是为什么我需要这个。还有其他解决办法吗?@Samuel当我有一个大列表时,它就不能完全满足我的要求。你需要总高度的原因是什么?如果列表很大,此方法的性能会很差。是否尝试了listItem.getHeight()?当你使用另一个答案时,出了什么问题?@Samuel实际上我必须在listview中显示评论列表。当行号为15或更高时,它不会返回实际高度,但如果行号为1到5,则它工作正常。我必须在视频视图下显示评论,这就是为什么我需要这个。“还有其他解决办法吗?”塞缪尔:当我有一个大名单时,它就不能完全满足我的需要。事实上,你理解我的问题。当代码行太多时,它无法返回实际高度。现在我的问题是如何获得屏幕宽度、左填充和右填充。你能和我们分享一些代码片段来获得这三样东西吗。谢谢你的评论。你好,你帮了我很多。另一个问题是我在哪里使用这个int-widthSpec值。您好,我解决了这个问题。谢谢你的好评论。事实上你理解我的问题。当代码行太多时,它无法返回实际高度。现在我的问题是如何获得屏幕宽度、左填充和右填充。你能和我们分享一些代码片段来获得这三样东西吗。谢谢你的评论。你好,你帮了我很多。另一个问题是我在哪里使用这个int-widthSpec值。您好,我解决了这个问题。谢谢你的好评论。