Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中获取listview高度?_Android_Android Listview - Fatal编程技术网

如何在android中获取listview高度?

如何在android中获取listview高度?,android,android-listview,Android,Android Listview,我需要用自定义ListVaAdapter找到android ListView的高度。每个ListView项的高度可以不同。我在这里找到了以下代码: public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) {

我需要用自定义ListVaAdapter找到android ListView的高度。每个ListView项的高度可以不同。我在这里找到了以下代码:

public static 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, MeasureSpec.UNSPECIFIED);
            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
但它并没有给出实际的高度;它为所有列表项提供相同的高度。是否可以使用不同高度的列表项查找ListView高度?

private int getTotalHeightoListView(){
private int getTotalHeightofListView() {

    ListAdapter LvAdapter = lv.getAdapter();
    int listviewElementsheight = 0;
    for (int i = 0; i < mAdapter.getCount(); i++) {
        View mView = mAdapter.getView(i, null, lv);
        mView.measure(
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        listviewElementsheight += mView.getMeasuredHeight();
    }
    return listviewElementsheight;
}
ListAdapter LvAdapter=lv.getAdapter(); int listviewElementsheight=0; 对于(int i=0;i
尝试此代码。

您可以使用getHeight()


或者按照此操作。

当您调用
measure(0,MeasureSpec.UNSPECIFIED)
时,您告诉视图布局系统使用无限宽度,因此例如
textview
可能只流向一行。尝试传递列表视图的宽度:

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter(); 
    int totalHeight = 0;
    int listWidth = listView.getMeasuredWidth();
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(
            MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
        totalHeight += listItem.getMeasuredHeight();
    }
    // ...update list height
} 
public static void setListViewHeightBasedOnChildren(ListView ListView){
ListAdapter ListAdapter=listView.getAdapter();
int totalHeight=0;
int listWidth=listView.getMeasuredWidth();
对于(int i=0;i

您还需要确保在列表视图上调用了
onMeasure
listView后调用此函数。getMeasuredWidth()
将返回0。

基于@jeevamuthu代码

public static int getLVHeight(ListView listView) {
    ListAdapter adapter = listView.getAdapter();
    int height = 0;
    int count = adapter.getCount();
    for (int i = 0; i < count; i++) {
        View view = adapter.getView(i, null, listView);
        view.measure(
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        height += view.getMeasuredHeight();
    }
    height += listView.getDividerHeight() * (count - 1);
    return height;
}
public static int getLVHeight(ListView ListView){
ListAdapter=listView.getAdapter();
整数高度=0;
int count=adapter.getCount();
for(int i=0;i
对于
ListView
的高度,您需要什么?我使用ListView在我的视图中显示用户的一组注释。该视图同时具有折叠和展开的注释视图,因此需要ListView高度以展开状态显示它,以便显示所有注释。我知道有addFooter()和addHeader()对于ListView,使整个视图成为可滚动的(我目前正在使用);但是有什么方法可以获得列表的高度吗?如果我理解您的评论,您需要完整的
ListView
,以便您可以将其分配给
ListView
,并显示其所有行。如果这是您正在尝试做的,那么您可以简单地通过为适配器中的所有项目扩展其行布局来“复制”列表视图(而不是获取其完整高度)。最后,您不应该这样做,因为您将忽略
ListView
回收视图以提高性能的目的,您可能会遇到麻烦。您可以发布列表项布局xml吗?我刚刚用不同高度的列表项尝试了您的代码,实际上从
listItem.getMeasuredHeight()获得了不同的高度
。做您想做的事情没有任何问题。您的代码迭代所有listview的子项,测量它们并汇总整个listview高度。在运行代码之前,您应该使用注释数据设置适配器。我不喜欢这一行:listItem.measure(0,MeasureSpec.UNSPECIFIED);您应该将第一个参数设置为listview的实际宽度,以正确测量listItem的高度。这将如何给出高度?抱歉,我写的是宽度而不是高度。这很好,但最好也添加分隔符高度!
public static int getLVHeight(ListView listView) {
    ListAdapter adapter = listView.getAdapter();
    int height = 0;
    int count = adapter.getCount();
    for (int i = 0; i < count; i++) {
        View view = adapter.getView(i, null, listView);
        view.measure(
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        height += view.getMeasuredHeight();
    }
    height += listView.getDividerHeight() * (count - 1);
    return height;
}