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?
- Casillas de verificación en un ListView - Cuando selecciono el primero, comprueba el último y viceversa
- Listview duplica el elemento cada 6 veces
- ¿Dónde debo colocar onClickListener en un ListView personalizado?
- Deslice la animación expandida en android
- ¿Cómo actualizar el listview cuando hago clic en el botón?
- Adaptador de matriz de Android con ArrayList y ListView no se actualizan cuando se cambia el arraylist
- Disposición de la vista Lista de Android Similar a Google play
- Desactivar Desplazamiento en el niño de Recyclerview android
- Cambiar icono de la vista de lista ampliable
- No se puede establecer una vista de lista personalizada en ListFragment
- ListView con elementos triangulares
- Desplazamiento a través de ListView con algunas imágenes muy laggy
- Ocultar y mostrar vistas en ListView Android
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; }
- Añadir una anotación personalizada a Android Saripaar
- Crear una clase general para el cuadro de diálogo personalizado en java Android