ScrollView 中的 ListViews 与我的 TextViews 重叠
Posted
技术标签:
【中文标题】ScrollView 中的 ListViews 与我的 TextViews 重叠【英文标题】:ListViews within ScrollView overlaps my TextViews 【发布时间】:2015-10-10 00:55:01 【问题描述】:我已经看到了很多与我相关的问题,但是,这些都没有奏效。我目前正在设计一个视图,其中一个 ScrollView 中有四个 ListView,我想让整个 ScrollView 滚动,同时显示 ListView 中的所有项目。那没问题;但是,对于不同的列表视图,列表视图一直与我的标题文本重叠。
我已经尝试了边距和填充;谁都没有工作。我还尝试将 scrollLayout 重新制作为 LinearLayout。我还尝试将文本放在单独的 LinearLayouts 中,与 ListViews 分开,但这也不起作用。
下面是我的源代码。有谁知道如何使文本不与 listViews 中的 Top 项目重叠?顺便说一句,上面的“***结果”工作得很好。
<ScrollView
android:layout_
android:layout_
android:id="@+id/scrollView"
android:layout_alignParentTop="true">
<RelativeLayout
android:layout_
android:layout_
android:id="@+id/scrollLayout">
<RelativeLayout
android:layout_
android:layout_
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:id="@+id/topResultLayout">
<TextView
android:layout_
android:layout_
android:id="@+id/topResultTitle"
android:textSize="20sp"
android:textIsSelectable="false"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textColor="#000000" />
<ListView
android:layout_
android:layout_
android:id="@+id/topResultList"
android:layout_below="@id/topResultTitle"/>
</RelativeLayout>
<RelativeLayout
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:id="@+id/streamResultLayout"
android:layout_below="@id/topResultLayout">
<TextView
android:layout_
android:layout_
android:id="@+id/streamResultTitle"
android:textSize="20sp"
android:textIsSelectable="false"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textColor="#000000" />
<TextView
android:layout_
android:layout_
android:id="@+id/seeAllStreams"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:textColor="#000000"
android:textSize="14sp"
android:layout_above="@+id/streamResultList" />
<ListView
android:layout_
android:layout_
android:id="@+id/streamResultList"
android:layout_below="@id/streamResultTitle"/>
</RelativeLayout>
<RelativeLayout
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:id="@+id/broadcasterResultLayout"
android:layout_below="@id/streamResultLayout">
<TextView
android:layout_
android:layout_
android:id="@+id/broadcasterResultTitle"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textSize="20sp"
android:textIsSelectable="false"
android:textColor="#000000" />
<TextView
android:layout_
android:layout_
android:id="@+id/seeAllBroadcasters"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:textColor="#000000"
android:textSize="14sp" />
<ListView
android:layout_
android:layout_
android:id="@+id/broadcasterResultList"
android:layout_below="@id/broadcasterResultTitle"/>
</RelativeLayout>
<RelativeLayout
android:layout_
android:layout_
android:layout_centerHorizontal="true"
android:id="@+id/tagResultLayout"
android:layout_below="@id/broadcasterResultLayout"
android:layout_alignParentBottom="true">
<TextView
android:layout_
android:layout_
android:id="@+id/tagResultTitle"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:textSize="20sp"
android:textIsSelectable="false"
android:textColor="#000000" />
<TextView
android:layout_
android:layout_
android:id="@+id/seeAllTags"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:textColor="#000000"
android:textSize="14sp" />
<ListView
android:layout_
android:layout_
android:id="@+id/tagResultList"
android:layout_below="@id/tagResultTitle"/>
</RelativeLayout>
</RelativeLayout>
</ScrollView>
【问题讨论】:
切勿在ScrollView
内使用 ListView
,反之亦然
listview 本身就是一个滚动视图
我认为 xml 看起来不错,你用什么来扩展它?我使用下面的代码。
【参考方案1】:
public static void setListViewHeightBasedOnChildren(ListView listView, ListAdapter adapter)
ListAdapter listAdapter = adapter;
if (listAdapter == null)
return;
int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.UNSPECIFIED);
int totalHeight = 0;
View view = null;
for (int i = 0; i < listAdapter.getCount(); i++)
view = listAdapter.getView(i, view, listView);
if (i == 0)
view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, ViewGroup.LayoutParams.WRAP_CONTENT));
view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
totalHeight += view.getMeasuredHeight();
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight;
listView.setLayoutParams(params);
listView.requestLayout();
【讨论】:
谢谢,这确实很有魅力。不过还是有些问题。它只显示第一个 ListView 的三项之一,即 streamResultList。你可能知道是什么原因造成的吗?另外,最后一个仍然不起作用,所以我添加了一个 20dp 的填充顶部,并且 tagResultLayout 中的 TextViews 和 ListView 分离了。但是,tagResultList 中最后一项的一小部分消失了。我可以在您的函数的 ListView 中添加一些空间吗?也许在循环中,比如 if (i == listAdapter.getCount()) ? 我现在解决了第一个问题,所以我看到了所有的流。但是,单击最后一节中的 seeAll 仍然不起作用。不幸的是,填充使得无法单击它,即使填充修复了布局问题。你知道怎么解决吗?非常感谢您的帮助!以上是关于ScrollView 中的 ListViews 与我的 TextViews 重叠的主要内容,如果未能解决你的问题,请参考以下文章