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

Posted

技术标签:

【中文标题】ListView 的高度填满整个屏幕,虽然设置为 wrap_content【英文标题】:Height of ListView fills the whole screen, although set as wrap_content 【发布时间】:2013-03-06 23:19:34 【问题描述】:

我在 LinearLayout 中有这个 ListView:

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

    <TextView
        .../>

    <EditText />
      ...
    </EditText>


    <ListView
        android:id="@+id/words_list"
        android:layout_
        android:layout_ >
    </ListView>

</LinearLayout>

List 由 SimpleCursorAdapter 以编程方式填充:

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

list_row_search 有一个带有两个 TableRows 的 TableLayout:

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

    <View
        android:layout_
        android:background="#FF33B5E5" />

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

        <TextView
            android:id="@+id/list_lesson"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:padding="1dip"
            android:textSize="12sp" />

        <TextView
            android:id="@+id/list_name"
            android:layout_
            android:layout_
            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_
            android:layout_
            android:layout_weight="12.5"
            android:padding="1dip"
            android:paddingRight="10dp" />

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

    <View
        android:layout_
        android:background="#404040" />

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

        <TextView
            android:id="@+id/list_related"
            android:layout_
            android:layout_
            android:layout_weight="2"
            android:paddingRight="10dp"
            android:textStyle="italic" />

        <TextView
            android:id="@+id/list_ant"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:paddingRight="10dp" />

        <TextView
            android:id="@+id/list_engl"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:paddingRight="10dp" />
    </TableRow>

    <View
        android:layout_
        android:background="#FF33B5E5" />

</TableLayout>

现在,当列表被填充时,ListView 会占据整个屏幕,即使在数据库中只找到一个元素。 eclipse 中的 HierarchyView 显示得很清楚,ListView 是填满屏幕的那个。

你能告诉我问题出在哪里吗?感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

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

可以让ListView 占据屏幕的其余部分。如果它只有一排,它会显示一排,没什么大不了的。除非您试图在列表下方显示某些内容,但我在上面告诉您的内容应该可以实现。

【讨论】:

感谢您的回答,但将高度从“wrap_content”更改为 0dp/weight=1 会导致相同的行为:ListView 会填满整个屏幕。事实上,我试图在列表下方显示一些东西,但是整个列表视图只显示一个元素(当只找到一个元素时)让我把列表放在下面...... 你仍然可以给它 height=0 和 weight=1。在它之后添加另一个视图,LinearLayout 将为该项目分配空间并将剩余部分提供给 ListView。相反,如果您试图让一个项目固定在列表底部但随着列表内容滚动,您想查看ListView.addFooterView()【参考方案2】:

如果上述方法不起作用,您可以只使用RelativeLayout 而不是线性并将ListView 放在EditText 下方。

【讨论】:

以上是关于ListView 的高度填满整个屏幕,虽然设置为 wrap_content的主要内容,如果未能解决你的问题,请参考以下文章

android布局如何实现显示填满整个手机屏幕,EditText如何设置能使其样式不随输入内容太多而发生变化。

Android的HorizontalScrollView控件里面的自控件无论怎么设置,宽度都无法填满屏幕

如何动态调整单个 UIStackView 的行高以填满整个屏幕?

在 Android 中,如何设置 ListView 项的高度和宽度?

Flutter ListView.builder() 小部件的交叉轴占据了整个屏幕高度

如何在 Flutter 中拉伸图像以适合整个背景(100% 高度 x 100% 宽度)?