根据他的非固定元素高度设置ListView的大小

时间:2019-06-24 07:27:32

标签: android listview

我的布局定义如下。

<ScrollView
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">

        <LinearLayout
            android:id="@+id/section1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="20dp"
                android:text="@string/anomaly_products_title"
                android:textColor="@color/title"
                android:textSize="16sp"
                android:textStyle="bold" />

            <ListView
                android:id="@+id/section1_list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="40dp"
                android:divider="@android:color/transparent"
                android:dividerHeight="20dp" />
        </LinearLayout>

        .... Some Other section

    </LinearLayout>
</ScrollView>

我还对列表项进行了如下定义。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="13dp"
    android:background="@drawable/semi_rounded">

    <CheckBox
        android:id="@+id/checkbox_item"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="16sp" />
</LinearLayout>

我想将ListView的高度设置为他所有元素的高度,并使其不可滚动。滚动只能在父ScrollView上进行。为此,我找到了函数setListViewHeightBasedOnChildren here

问题是我的复选框标签可以显示在多行上,因此会稍微增加项目的大小。在这种情况下,如果有许多复选框,则ListView可以滚动。

有什么办法可以处理这种情况?

1 个答案:

答案 0 :(得分:0)

我建议您为您的ListView添加页眉和页脚,而不要添加ScrollViewListView的组合。这是简单且易于实现的。这是nice tutorial的有关如何在ListView中添加页眉/页脚的信息。

根据项目数和项目大小来处理ListView的高度非常困难,并且难以优化整个过程。您也可以考虑使用RecyclerView代替ListView。它也可以选择添加页眉和页脚。 Here's an implementation

要添加多个列表(您的情况下为多个部分),您可以考虑研究此示例Github Project,这可能会为您提供如何使用RecyclerView实现所需行为的线索。

因此,删除ScrollView。将ListView上方的内容放在单独的布局文件中,并对ListView下方的内容执行相同的操作。然后将它们分别添加为页眉和页脚。