ViewGroup {TextView, …} .getMeasuredHeight da valor incorrecto es menor que la altura real

{ January 14, 2011... I have given up to use setListViewHeightBasedOnChildren(ListView listView}, instead, I don't put my listview in a scrollview, and then just put other contents into a listview by using ListView.addHeaderView() and ListView.addFooterView(). http://dewr.egloos.com/5467045 } 

ViewGroup (ViewGroup contiene TextViews con texto largo excepto line-feed-character) .getMeasuredHeight devuelve un valor incorrecto … que es menor que la altura real.

Cómo deshacerse de este problema?

Aquí está el código java:

  /* I have to set my listview's height by myself. because if a listview is in a scrollview then that will be as short as the listview's just one item. */ public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = 0; int count = listAdapter.getCount(); for (int i = 0; i < count; i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(View.MeasureSpec.AT_MOST, View.MeasureSpec.UNSPECIFIED); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); } 

Y aquí está el list_item_comments.xml:

La pregunta es bastante antigua, pero tuve un problema similar, así que voy a describir lo que estaba mal. En realidad, los parámetros de listItem.measure () se usan mal, debe establecer algo como esto:

 listItem.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)) 

Sin embargo, tenga cuidado con la especificación de medida de anchura no especificada, ignorará todos los parámetros de diseño e incluso las dimensiones de la pantalla, de modo que para obtener la altura correcta, primero obtenga la máxima vista Puede usar y llamar a measure () de esta manera:

 listItem.measure(MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 

Esta es la única solución que he encontrado hasta ahora. http://syedrakibalhasan.blogspot.com/2011/02/how-to-get-width-and-height-dimensions.html

También da un valor incorrecto cuando el archivo xml del elemento listview tiene relleno. Quite el relleno, trate de usar el margen y funcionará perfectamente.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.