滚动视图中的列表视图在横向模式下不滚动
Posted
技术标签:
【中文标题】滚动视图中的列表视图在横向模式下不滚动【英文标题】:Listview inside scrollview does not scroll in lanscape mode 【发布时间】:2018-08-13 22:16:28 【问题描述】:我必须在 android 中生成一个动态的listview
。 listview
放在 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();
【讨论】:
以上是关于滚动视图中的列表视图在横向模式下不滚动的主要内容,如果未能解决你的问题,请参考以下文章