Android |如何在ScrollView中使用ExpandableListView?

时间:2015-12-19 11:38:24

标签: java android scrollview expandablelistview

我的xml文件中有两个ExpandableListViews和一些TextViews。当我展开第一个(在顶部)ExpandableListView时,它会将所有内容压缩在一起,而第二个(在底部)ExpandableListView只剩下非常少的空间。用户只能通过在很小的范围内滚动来查看第二个ExpandableListView的内容。

我已经考虑过将其包裹在ScrollView中,但我的ExpandableListViews只显示第一组并且无法展开。此外,如果我将高度设置为静态数字并且所有组都已扩展,则无法再看到内容。

我希望ExpandableListViews都可以扩展,我可以上下滚动布局,以便所有内容都有足够的空间。 有什么建议吗?

我的XML.File

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

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="?attr/colorPrimary"
            android:paddingLeft="16dp"
            android:paddingStart="16dp"
            android:paddingEnd="16dp"
            android:paddingRight="16dp"
            android:paddingTop="16dp"
            android:text="Group1"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Attention1"
            android:textStyle="bold"
            android:textColor="@android:color/black"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:paddingTop="5dp"
            android:paddingBottom="5dp" />

        <ExpandableListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/elv_theorie"
            android:layout_gravity="center_horizontal"
            android:groupIndicator="@android:color/transparent"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:textColor="?attr/colorPrimary"
            android:paddingLeft="16dp"
            android:paddingStart="16dp"
            android:paddingEnd="16dp"
            android:paddingRight="16dp"
            android:paddingTop="16dp"
            android:text="Group2"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Attention2"
            android:textStyle="bold"
            android:textColor="@android:color/black"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"/>

        <ExpandableListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/elv_pruefung"
            android:layout_gravity="center_horizontal"
            android:groupIndicator="@android:color/transparent" />

</LinearLayout>

我的问题:

My Problem

使用ScrollView仅显示第一个组且无法展开

With ScrollView

1 个答案:

答案 0 :(得分:0)

您应该使用此功能设置可扩展列表视图的动态高度

private void setListViewHeight(ExpandableListView listView,
                               int group) {
    ExpandableListAdapter listAdapter = (ExpandableListAdapter) listView.getExpandableListAdapter();
    int totalHeight = 0;
    int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),
            View.MeasureSpec.EXACTLY);
    for (int i = 0; i < listAdapter.getGroupCount(); i++) {
        View groupItem = listAdapter.getGroupView(i, false, null, listView);
        groupItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
        totalHeight += groupItem.getMeasuredHeight();
        if (((listView.isGroupExpanded(i)) && (i != group))
                || ((!listView.isGroupExpanded(i)) && (i == group))) {
            for (int j = 0; j < listAdapter.getChildrenCount(i); j++) {
                View listItem = listAdapter.getChildView(i, j, false, null,
                        listView);
                listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
                totalHeight += listItem.getMeasuredHeight();
            }
        }
    }
    ViewGroup.LayoutParams params = listView.getLayoutParams();
    int height = totalHeight
            + (listView.getDividerHeight() * (listAdapter.getGroupCount() - 1));
    if (height < 10)
        height = 200;
    params.height = height;
    listView.setLayoutParams(params);
    listView.requestLayout();

}