2013-03-18 10 views
10

Ich habe dieses Listview in einem Linearlayout:Höhe von Listview füllt den ganzen Bildschirm, obwohl eingestellt als 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> 

Die Liste programmatisch von einem SimpleCursorAdapter bevölkert ist:

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

list_row_search hat eine Tablelayout mit zwei 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> 

Jetzt, wenn die Liste ausgefüllt wird, die L IstView belegt den Lochbildschirm, auch wenn nur ein Element in der Datenbank gefunden wurde. Die Hierarchieansicht in der Eclipse zeigt ziemlich klar, dass die ListView diejenige ist, die den Bildschirm ausfüllt.

Können Sie sagen, wo das Problem liegt? Vielen Dank für Ihre Zeit!

Antwort

14

Sie sollten wrap_content nicht für die Höhe eines ListView verwenden. wrap_content bedeutet "mach mich so groß wie nötig, um alle meine Kinder zu halten." Wenn Sie bedenken, dass Ihr Datensatz potenziell sehr groß sein könnte, sollte das wie eine ziemlich schlechte Idee klingen. Da Sie ein LinearLayout verwenden, geben Sie Ihrem ListView layout_height="0dp" und layout_weight="1".

Es ist okay, den ListView den Rest des Bildschirms nehmen zu lassen. Wenn es nur eine Zeile hat, wird es eine Zeile anzeigen, keine große Sache. Es sei denn, Sie versuchen, etwas unter der Liste zu zeigen, aber was ich Ihnen oben gesagt habe, sollte das erreichen.

+1

Vielen Dank für Ihre Antwort, aber das Ändern der Höhe von "wrap_content" auf 0dp/weight = 1 führt zu demselben Verhalten: Das ListView füllt den gesamten Bildschirm aus. In der Tat habe ich versucht, etwas unter der Liste zu zeigen, aber eine ganze Listenansicht, die nur ein Element zeigt (wenn nur ein gefunden wurde), brachte mich dazu, die Liste darunter zu setzen ... –

+0

Sie können es immer Höhe = 0 und Gewicht = 1 geben. Fügen Sie eine weitere Ansicht hinzu, und das LinearLayout wird Speicherplatz für dieses Element zuweisen und den Rest der ListView zuweisen. Wenn Sie stattdessen versuchen, ein Element zu haben, das am Ende der Liste steht, aber mit dem Inhalt der Liste scrollt, wollen Sie 'ListView.addFooterView()' betrachten – Karakuri

0

Wenn das obige nicht funktioniert, können Sie einfach RelativeLayout statt linear verwenden und die ListView unter die EditText setzen.

Verwandte Themen