当列表中没有实际的项目时,有没有办法在代码中获取ListViewItem的高度?
我的ListViewItem布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight">
...
</LinearLayout>
我试着用充气器来获得它:
View convertView = LayoutInflater.from( this )
.inflate( R.layout.mail_list_row, null );
int itemHeight = convertView.getHeight();
但它返回0;
谢谢!
发布于 2010-07-29 21:23:44
在android中,视图只有在渲染完成时才会分配宽度和高度。所以,除非你的list至少呈现一次,否则你不会得到listItemHeight。问题的解决方案可能是设置列表项的最小高度,以便至少有一些东西可用,而不是硬编码高度和宽度。
发布于 2012-09-20 21:39:21
试试这个,它会对你有用的。
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;
}
发布于 2014-10-07 20:57:31
Dwivedi Ji
代码的优化版本,带有分隔符高度,没有不必要的参数:
private int calculateHeight(ListView list) {
int height = 0;
for (int i = 0; i < list.getCount(); i++) {
View childView = list.getAdapter().getView(i, null, list);
childView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
height+= childView.getMeasuredHeight();
}
//dividers height
height += list.getDividerHeight() * list.getCount();
return height;
}
https://stackoverflow.com/questions/3361423
复制相似问题