ListView的高度填充整个屏幕,虽然设置为wrap_content

我有一个LinearLayout里面的ListView:

<?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> 

列表由SimpleCursorAdapter以编程方式填充:

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

list_row_search有一个TableLayout和两个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> 

现在当列表被填充时,即使数据库中只有一个元素被find,ListView也会占据漏洞屏幕。 eclipse中的HierarchyView显示非常清晰,ListView是填充屏幕的那个。

你能告诉,问题在哪里? 谢谢你的时间!

Solutions Collecting From Web of "ListView的高度填充整个屏幕,虽然设置为wrap_content"

你不应该使用wrap_content作为ListView的高度。 wrap_content意思是“让我尽可能大,以容纳我所有的孩子”。 当你考虑到你的数据集可能非常大时,这听起来应该是一个很坏的主意。 由于您使用的是LinearLayout,因此您的ListView layout_height="0dp"layout_weight="1"

ListView进入屏幕的其余部分是可以的。 如果它只有一行,它会显示一行,没有什么大不了的。 除非你试图在列表下面显示一些东西,但是上面告诉你的东西应该能够实现。

如果上面的不行,你可以使用RelativeLayout来代替线性,并把ListView放在EditText下面。