【问题标题】:Android | How to use ExpandableListView in a ScrollView?安卓 |如何在 ScrollView 中使用 ExpandableListView?
【发布时间】:2016-03-26 00:39:04
【问题描述】:

我的 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>

我的问题:

带有ScrollView只显示第一组且无法展开

【问题讨论】:

  • 你最好不要。嵌套的可滚​​动视图很可能会导致滚动问题。
  • 默认情况下保持第一个组视图在两个可扩展列表适配器中展开。

标签: java android scrollview expandablelistview


【解决方案1】:
Add this line inside the scrollview:
 android:fillViewport="true"

【讨论】:

    【解决方案2】:

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

    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();
    
    }
    

    【讨论】:

    • 这很好。但是当我扩展一个组时,它不会改变高度。
    猜你喜欢
    • 2018-09-28
    • 2014-06-14
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多