2011-01-12 12 views
8
{ 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 (la ViewGroup è contenente TextViews con testo lungo tranne avanzamento riga caratteri) .getMeasuredHeight valore errato di resi ... che è più piccolo dell'altezza reale.ViewGroup {TextView, ...}. GetMeasuredHeight dà valore sbagliato è minore altezza reale

come sbarazzarsi di questo problema?

Ecco il codice 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); 
} 

e qui è il list_item_comments.xml:

risposta

14

La domanda è piuttosto vecchia, ma ho avuto un problema simile, quindi descriverò cosa c'è che non va. In realtà, i parametri in listItem.measure() vengono utilizzati male, si dovrebbe impostare qualcosa di simile:

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

Tuttavia, fare attenzione con non specificato misura larghezza spec, ignorerà tutti i params di layout e anche le dimensioni dello schermo, in modo da per ottenere giusta altezza, prima ottenere la larghezza massima di vista può usare e misura call() in questo modo:

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

Questo mi ha davvero aiutato. Molte grazie! – myforums

+1

@ user711058 ho lo stesso problema ma questo risolve il problema non funziona – anshul

+2

Questa risposta mi ha aiutato a risolvere un problema su cui ho lavorato per un po '. Il mio problema deriva da una mancanza di comprensione di come la misura ha funzionato. La mia vista figlio utilizzava match_parent per la sua larghezza, ma la mia chiamata di misura utilizzava MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED) per il parametro width. La modifica del parametro width su MeasureSpec.makeMeasureSpec (getWidth(), MeasureSpec.EXACTLY) mi ha consentito di ottenere l'altezza corretta dalla vista chiamando view.getMeasuredHeight(). Grazie! – DalvikDroid

0

Si dà anche valore errato quando il file XML di elemento ListView ha imbottitura. Rimuovi il padding, prova a usare il margine e funzionerà perfettamente.

Problemi correlati