滚动视图中的列表视图在横向模式下不滚动

Posted

技术标签:

【中文标题】滚动视图中的列表视图在横向模式下不滚动【英文标题】:Listview inside scrollview does not scroll in lanscape mode 【发布时间】:2018-08-13 22:16:28 【问题描述】:

我必须在 android 中生成一个动态的listviewlistview 放在 scrollview 内,因为我还有其他内容要显示在 listview 上方。像这样的东西:

向下部分是动态添加的列表视图。这一切在三星note5的纵向模式下都很好,但是当我将屏幕方向更改为横向时,列表视图不会滚动。这可能是因为我为列表视图提供了 wrap-content。

请检查我的布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:id="@+id/rootLayout">
    <ScrollView
        android:layout_
        android:layout_
        android:fillViewport="true"
        android:background="@color/gray25"
        android:id="@+id/scrollView"
        android:layout_above="@id/footer">
        <LinearLayout
            android:orientation="vertical"
            android:layout_
            android:layout_
            android:id="@+id/mainLayout"
            android:background="@color/light_blue"
            android:paddingBottom="@dimen/_10sdp">
        <!--Top header-->
            <LinearLayout
                android:layout_
                android:layout_
                android:orientation="vertical"
                android:gravity="center_vertical"
                android:id="@+id/topheader"
                android:background="@drawable/dashboard_button"
                android:layout_marginLeft="@dimen/_5sdp"
                android:layout_marginRight="@dimen/_5sdp"
                android:layout_marginTop="@dimen/_5sdp"
                android:padding="@dimen/_5sdp">

            </LinearLayout>
        <!--middle portion-->


            <ListView
                android:id="@+id/RFIDList"
                android:layout_
                android:layout_
                android:transcriptMode="alwaysScroll"
                android:layout_marginTop="@dimen/_10sdp"
                android:background="@drawable/dashboard_button"
                android:layout_marginLeft="@dimen/_5sdp"
                android:layout_marginRight="@dimen/_5sdp"
                android:minHeight="@dimen/_50sdp" />

        </LinearLayout>
    </ScrollView>
<!-- Footer aligned to bottom -->
    <RelativeLayout
        android:id="@+id/footer"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:background="@color/white">
        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal"
            android:gravity="left"
            android:layout_centerInParent="true"
            android:layout_marginLeft="@dimen/_15sdp">               
        </LinearLayout>
    </RelativeLayout>
</RelativeLayout>

我无法为列表视图提供固定高度,因为它的项目是动态生成的。我试图找到解决方案,还尝试将我的列表视图更改为 recyclerview 但没有奏效。但任何帮助将不胜感激。

【问题讨论】:

Android list view inside a scroll view Android list view inside a scroll view的可能重复 【参考方案1】:

如果你使用RecyclerView 使用NestedScrollView 而不是ScrollView 并设置

recyclerView.setNestedScrollingEnabled(false);设置布局管理器后

对于ListView,请参阅我对here 的回答

【讨论】:

看起来是完美的答案。【参考方案2】:

listView.setAdapter(yourAdapter);之后使用下面的方法 作为 setlistViewHeight(listView,context);

您的问题将得到解决。

public static void setlistViewHeight(ListView listView, Context context) 

    ListAdapter myListAdapter = listView.getAdapter();

    if (myListAdapter == null) 
        return;
    

    int totalHeight = 0;
    for (int size = 0; size < myListAdapter.getCount(); size++) 

        View listItem = myListAdapter.getView(size, null, listView);
        if (listItem instanceof ViewGroup)
            listItem.setLayoutParams(new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT));

        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        @SuppressWarnings("deprecation")
        int screenWidth = display.getWidth();
        int listViewWidth = screenWidth - 65;
        int widthSpec = View.MeasureSpec.makeMeasureSpec(listViewWidth,
                View.MeasureSpec.AT_MOST);
        listItem.measure(widthSpec, 0);

        totalHeight += listItem.getMeasuredHeight();
    

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (myListAdapter.getCount()));
    listView.setLayoutParams(params);
    listView.requestLayout();

【讨论】:

以上是关于滚动视图中的列表视图在横向模式下不滚动的主要内容,如果未能解决你的问题,请参考以下文章

ipad中纵向和横向的滚动视图

横向时快速滚动视图全屏

odoo tree视图中实现横向滚动条

定向更改时的列表视图的自定义对话框(横向模式)

滚动视图中的约束布局

将 UIImageView 对齐到 UIScrollView 的底部