2013-03-18 13 views
10

ho questo ListView all'interno di un LinearLayout:Altezza ListView riempie tutto lo schermo, anche se impostare come wrap_content

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     .../> 

    <EditText /> 
     ... 
    </EditText> 


    <ListView 
     android:id="@+id/words_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</LinearLayout> 

L'elenco è popolato di programmazione da un SimpleCursorAdapter:

adapter = new SimpleCursorAdapter(this, R.layout.list_row_search, mCursor, from, to); 

list_row_search ha una TableLayout con due TableRows:

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/TableLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <View 
     android:layout_height="1dip" 
     android:background="#FF33B5E5" /> 

    <TableRow 
     android:id="@+id/tableRow1" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/list_lesson" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:padding="1dip" 
      android:textSize="12sp" /> 

     <TextView 
      android:id="@+id/list_name" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="5.25" 
      android:padding="1dip" 
      android:paddingRight="10dp" 
      android:textSize="18sp" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/list_flex" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="12.5" 
      android:padding="1dip" 
      android:paddingRight="10dp" /> 

     <TextView 
      android:id="@+id/list_rom" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="6.25" 
      android:padding="1dip" 
      android:paddingRight="10dp" /> 
    </TableRow> 

    <View 
     android:layout_height="0.1dip" 
     android:background="#404040" /> 

    <TableRow 
     android:id="@+id/tableRow2" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/list_related" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="2" 
      android:paddingRight="10dp" 
      android:textStyle="italic" /> 

     <TextView 
      android:id="@+id/list_ant" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:paddingRight="10dp" /> 

     <TextView 
      android:id="@+id/list_engl" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:paddingRight="10dp" /> 
    </TableRow> 

    <View 
     android:layout_height="1dip" 
     android:background="#FF33B5E5" /> 

</TableLayout> 

Ora quando la lista viene popolata, la L istView occupa la schermata dei fori, anche se nel database è stato trovato solo un elemento. HierarchyView in eclissi mostra chiaramente che ListView è quello che riempie lo schermo.

Puoi dire, dove si trova il problema? Grazie per il tuo tempo!

risposta

14

Non utilizzare wrap_content per l'altezza di ListView. wrap_content significa "rendimi grande quanto serve per tenere tutti i miei figli". Se consideri che il tuo set di dati potrebbe essere potenzialmente molto grande, ciò dovrebbe sembrare un'idea piuttosto brutta. Poiché si utilizza un LinearLayout, fornire ListView layout_height="0dp" e layout_weight="1".

Va bene lasciare che lo ListView occupi il resto dello schermo. Se ha solo una riga, mostrerà una riga, non un grosso problema. A meno che tu non stia cercando di mostrare qualcosa sotto l'elenco, ma quello che ti ho detto sopra dovrebbe realizzarlo.

+1

Grazie per la risposta, ma la modifica dell'altezza da "wrap_content" a 0dp/weight = 1 comporta lo stesso comportamento: il ListView riempie l'intero schermo. In effetti stavo cercando di mostrare qualcosa sotto la lista, ma un'intera listview che mostrava solo un elemento (quando ne trovai uno solo) mi ha fatto mettere la lista sotto ... –

+0

Puoi ancora dargli altezza = 0 e peso = 1. Aggiungi un'altra vista dopo di essa e LinearLayout assegnerà spazio per quell'elemento e assegnerà il resto a ListView. Se invece stai provando ad avere un oggetto che è fissato in fondo alla lista ma scorre con il contenuto della lista, devi guardare 'ListView.addFooterView()' – Karakuri

0

Se sopra non funziona, è possibile utilizzare semplicemente RelativeLayout anziché lineare e inserire ListView sotto lo EditText.

Problemi correlati