3

我对以下布局的问题是布局不滚动。我的要求是我必须显示 2 个有时可能很大的列表。因此,我将两个 ListView 都放在了 ScrollView 中,这样我就可以滚动到底部并查看两个 ListView。I don't want the ListView to scroll. 我只希望我的 ScrollView 能够正常运行。有什么建议么??

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ScrollView
        android:id="@+id/scrollViewContactDetails"
        android:layout_width="match_parent"
        android:layout_height="fill_parent" android:fillViewport="true">


        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >


            <TextView
                android:id="@+id/name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="5dp"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textSize="22dp" />

            <LinearLayout
                android:id="@+id/numbersLayout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:orientation="vertical"
                android:weightSum="1" >

                <LinearLayout
                    android:id="@+id/numbersLayoutList"
                    android:layout_width="match_parent"
                    android:layout_height="fill_parent"
                    android:gravity="center"
                    android:orientation="vertical"
                    android:weightSum="1" >

                    <ListView
                        android:id="@+id/numbersList"
                        android:layout_width="match_parent"
                        android:layout_height="fill_parent"
                        android:layout_gravity="center"
                        android:dividerHeight="2dp" >
                    </ListView>
                </LinearLayout>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/emailLayout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginRight="20dp"
                android:layout_marginTop="10dp"
                android:orientation="horizontal"
                android:weightSum="1" >

                <LinearLayout
                    android:layout_width="120dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="right|center"
                    android:gravity="top|right"
                    android:orientation="vertical" >

                    <TextView
                        android:id="@+id/emailId"
                        android:layout_width="120dp"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="10dp"
                        android:gravity="right|center"
                        android:textAppearance="?android:attr/textAppearanceMedium"
                        android:textColor="#8d8d8d"
                        android:textSize="18dp" />
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/emailLayoutList"
                    android:layout_width="match_parent"
                    android:layout_height="fill_parent"
                    android:layout_marginLeft="20dp"
                    android:gravity="center"
                    android:orientation="vertical"
                    android:weightSum="1" >

                    <ListView
                        android:id="@+id/emailList"
                        android:layout_width="match_parent"
                        android:layout_height="fill_parent"
                        android:layout_gravity="center"
                        android:layout_weight="1"
                        android:dividerHeight="2dp" >
                    </ListView>
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>
4

6 回答 6

17

我花了几天时间试图弄清楚如何实现这一目标,但找不到任何解决方案。You should not put a ListView inside a ScrollView是我搜索的所有地方的普遍说法。我不想使用 LinearLayout 或 ViewGroup,因为我已经使用 ListView 创建了整个 UI,它对我和其他人来说都很棒。它运行良好,只是页面没有滚动。

最近我在这里偶然发现了一个问题,并想尝试一下这个答案。它完美无缺!

这是解决方案:

public class Utility {
    public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter(); 
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }
}

只需Utility.setListViewHeightBasedOnChildren(yourListView)在将适配器分配给列表视图后调用即可!

非常感谢您DougW提出答案。这是原始链接如何将 ListView 放入 ScrollView 而不折叠?

于 2013-04-12T13:49:23.307 回答
3

您不应该将列表视图放入滚动视图,这不是一个好主意。如果您不希望它滚动,也许您不应该使用列表视图。你试过线性布局吗?

于 2013-02-05T08:06:22.313 回答
1

您可以使用一个列表视图,而不是放置两个列表视图,您可以在该列表视图的适配器中添加两个数据或膨胀两个 xml 文件。这将在一个列表视图中显示两个数据并使用一个滚动条滚动数据。

于 2013-02-05T08:14:35.180 回答
1

在调用以下方法之前,

public static void setListViewHeightBasedOnChildren(ListView listView) {
        ListAdapter listAdapter = listView.getAdapter(); 
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }

您必须从滚动视图中删除属性 'android:fillViewport="true"。如果没有,滚动不起作用。

于 2018-04-26T10:30:29.977 回答
0

试试这个方法:

您从布局中删除了滚动视图,因为列表视图无法正常工作。

并且您还设置了"android:layout_height="fill_parent"列表视图的高度,以便占据父布局的全部高度。

所以请为两个列表视图手动修复一些高度。

于 2013-02-05T08:13:46.137 回答
0

找到解决方案只需添加:

android:nestedScrollingEnabled="true"

到列表视图:3

            <ListView
                android:id="@+id/ListViewPrzebiegTrasy"
                android:layout_width="match_parent"
                android:layout_height="200dp"
                android:visibility="visible"
                android:scrollbars="vertical"
                android:nestedScrollingEnabled="true">
            </ListView>
于 2021-04-27T12:15:55.113 回答