计算列表视图的大小或如何让其完全展开

37

我目前在尝试将ListView放置在ScrollView中。根据我所了解的,这种做法不被推荐,但我想让ListView完全展开,并显示所有行,以便无需滚动。然而,我一直在努力找到方法告诉ListView在需要定义高度时如何完全展开以显示所有行。我该如何在绘制之前计算完全展开的ListView的高度呢?

这个问题主要源于不能在另一个可滚动视图中放置一个可滚动视图。只要我能够使ListView扩展展示所有行,即使它无法滚动,我也没关系。然而,如果没有为其指定高度,我无法实现这一点,而这似乎需要计算。

我的整个布局对于“物理”屏幕来说太大了,需要滚动才能显示余下的列表和底部的按钮。我想表达的是,“虚拟”屏幕即使没有ListView也太大而无法适合一个屏幕。


“完全展开”是什么意思? - CommonsWare
通过完全展开,我指的是显示它的所有行。问题已经适当编辑以解释这一点。 - Rudy Mutter
如果您发布您尝试完成的内容的屏幕截图或草图可能会有所帮助。我很难理解为什么“尽可能扩展,然后滚动如果有太多项目无法适合”的默认行为不足。 - Cheryl Simon
12个回答

0

我知道现在已经有答案了,但如果你真的想做到这一点,有一个简单的方法:

创建具有定义高度的列表视图项

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/lvItemSurpriseMeImgRestaurant"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_marginLeft="5dp"
        android:contentDescription="@string/restaurantImageDescriptionColon" />
</LinearLayout>

现在我们知道该项的高度为100dp,如果我们知道项目数量,则非常简单

ListView的高度直接设置为NoOfItems*Height+10dp额外高度

它永远不会改变,因为所有单位都是dp

如果您有多个项目类型,则使用基本数学计算并设置它

        <ListView
            android:id="@+id/menuListView"
            android:layout_width="match_parent"
            android:layout_height="210dp"
            android:layout_weight="1.0"
            tools:ignore="NestedScrolling"
            tools:listitem="@layout/menu_item" >
        </ListView>

不处理行高不同的情况,例如长文本换行时。 - Justin
我建议您尝试使用elipsize(拼写不确定),但它不会让文本超过您使用的最大行数限制,可以搜索一下,因为我是用手机的。 - Shereef Marzouk
省略号在我的情况下无效。必须编程计算尺寸来扩展列表视图。 - Mando

0
我最终覆盖了ListView的onDraw()方法,并计算视图中可见行的平均高度,然后根据适配器中有多少项来估算列表的实际高度。这种估算会进行几次,直到所有行都可见为止。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接