Cómo obtener la altura de la lista en android?

Necesito encontrar la altura de androide ListView con ListVAdapter personalizado. Cada uno de los elementos de ListView puede tener alturas variables. He intentado el código siguiente que encontré aquí:

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(); } 

Pero no da altura real; Da la misma altura para todos los elementos de la lista. ¿Es posible encontrar la altura de ListView con elementos de lista de altura variable?

 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; } 

Prueba este código.

Cuando llama a measure(0, MeasureSpec.UNSPECIFIED) , le está diciendo al sistema de diseño de vista que utilice un ancho infinito, por lo que, por ejemplo, TextViews puede fluir a una sola línea. Trate de pasar el ancho de su vista de lista:

 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 } 

También debe asegurarse de que llama a esto después de que onMeasure haya sido llamado en la vista de lista, o listView.getMeasuredWidth() devolverá 0.

Puede utilizar getHeight ():

 System.out.println("height of list view..."+listview.getHeight()); 

O sigue esta respuesta .

Basado en el código @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; } 
  • Implementación de una vista de lista con selección múltiple con filtro utilizando un adaptador de cursor
  • Implementar una lista con divisor de sección en android
  • ListView ya no reacciona a onclick después de una llamada a setSelection ()
  • Endless RecyclerView con ProgressBar para paginación
  • No se puede establecer OnCheckedChangeListener en una casilla de verificación
  • ¿Cómo puedo agregar filas a un listview de forma asíncrona?
  • Android: teclado suave empuja toda la distribución, necesita cambiar el tamaño de la vista de lista
  • Obtener datos de JSON en la vista de lista
  • Sustitución de la fila ListView por otra presentación onClick
  • Vaciar ListView dentro de ScrollView como dos Fragmentos
  • Efecto de botón de diapositiva en el elemento de vista de lista para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.