在我的片段布局上,我有一个嵌套滚动视图,顶部和底部有两个相对布局,在底部,我有一个带有约20个元素的listview,但是如果我用wrap_content设置listview的高度,则只有一行例如,如果将高度设置为1000dp,则显示所有行,但我不想以静态方式固定高度,而是希望使用wrap_content,该怎么办?
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/nested_content"
android:clipToPadding="false"
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/top">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp"
//some button and text view
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bottom"
android:layout_below="@id/top">
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/scores"
</ListView>
</RelativeLayout>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
答案 0 :(得分:1)
您可以使用下面的Utility方法根据孩子人数来设置ListView
的高度。
public static void setListViewHeightBasedOnChildren(ListView myListView) {
ListAdapter adapter = myListView.getAdapter();
if (myListView != null) {
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View item= adapter.getView(i, null, myListView);
item.measure(0, 0);
totalHeight += item.getMeasuredHeight();
}
ViewGroup.LayoutParams params = myListView.getLayoutParams();
params.height = totalHeight + (myListView.getDividerHeight() * (adapter.getCount() - 1));
myListView.setLayoutParams(params);
}
}
答案 1 :(得分:0)
1。删除NestedScrollView
2.像这样将其添加到android:transcriptMode =“ alwaysScroll”
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/scores"
android:transcriptMode="alwaysScroll"
</ListView>
答案 2 :(得分:0)
您可以签出Expandable Height List View。
我个人使用的是Exapandable Height GridView,与Expandable Height List View的哲学相同。
答案 3 :(得分:0)
伙计,这是RelativeLayout Blitzkrieg的一种。但是,如果这是适合您的功能所需的,也许您应该尝试设置NestedScrollView来填充其视口。
android:fillViewport =“ true”
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/nested_content"
android:clipToPadding="false"
android:scrollbars="none"
android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
使用您发布的内容的“ deblitzkrieged”版本对此进行了尝试,并且可以正常工作,也许它对您4也有效。
更新: 没错,较高的方法会给您留下不可滚动的片段。
我还在ListView上设置了android:nestedScrollingEnabled="true"
并立即忘记了它。
如果仍然有人对代码示例感兴趣,请参见下面的示例。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/nested_content"
android:clipToPadding="false"
android:fillViewport="true"
android:scrollbars="none">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/top">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Foo Bar"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:id="@+id/bottom"
android:layout_below="@id/top">
<ListView
android:nestedScrollingEnabled="true"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scores">
</ListView>
</RelativeLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>