我的布局定义如下。
<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
可以滚动。
有什么办法可以处理这种情况?
答案 0 :(得分:0)
我建议您为您的ListView
添加页眉和页脚,而不要添加ScrollView
和ListView
的组合。这是简单且易于实现的。这是nice tutorial的有关如何在ListView
中添加页眉/页脚的信息。
根据项目数和项目大小来处理ListView
的高度非常困难,并且难以优化整个过程。您也可以考虑使用RecyclerView
代替ListView
。它也可以选择添加页眉和页脚。 Here's an implementation。
要添加多个列表(您的情况下为多个部分),您可以考虑研究此示例Github Project,这可能会为您提供如何使用RecyclerView
实现所需行为的线索。
因此,删除ScrollView
。将ListView
上方的内容放在单独的布局文件中,并对ListView
下方的内容执行相同的操作。然后将它们分别添加为页眉和页脚。