如何在android中获取listview高度?
我需要用自定义ListVaAdapter找到android ListView的高度。每个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) {
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;
}