Android -如何获取ListView项目的高度?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

当列表中没有实际项目时,有没有办法在代码中获取ListViewItem高度?

我的ListViewItem布局:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight">
...
</LinearLayout>  

我试图用Inflater来获得它:

View convertView = LayoutInflater.from( this )
    .inflate( R.layout.mail_list_row, null );
int itemHeight = convertView.getHeight();

但它返回0;

提问于
用户回答回答于

在android中,视图仅在其渲染完成时才被分配宽度和高度。所以除非你列表呈现atleast一旦你不会得到listItemHeight。解决您的问题的方法可能是您设置了列表项的某个最小高度,这样你至少可以使用某些东西来代替硬编码的高度和宽度。

用户回答回答于

试试这段代码,是可行的:

private static final int UNBOUNDED = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);

// To calculate the total height of all items in ListView call with items = adapter.getCount()
public static int getItemHeightofListView(ListView listView, int items) {
    ListAdapter adapter = listView.getAdapter();

    int grossElementHeight = 0;
    for (int i = 0; i < items; i++) {
        View childView = adapter.getView(i, null, listView);
        childView.measure(UNBOUNDED, UNBOUNDED);
        grossElementHeight += childView.getMeasuredHeight();
    }
    return grossElementHeight;
}

扫码关注云+社区