Android列表视图将内容包装到基于页脚大小的特定大小

时间:2013-09-23 18:05:00

标签: java android android-layout android-listview height

我正在开发一个Android应用程序。

在XML布局中,我需要执行以下操作:

我在顶部有一个列表视图(listViewProducts),在它下面有另一个Relative视图(receiptSection)。

列表视图应占用与项目一样多的空间。其余部分由receiptSection承担。

例如,如果我在listViewProducts中有2个项目:

first image

列表视图与2个项目一样大,其余部分由receiptView查看。

如果我添加另一个项目,列表视图现在占用更多空间并按下receiptView更低:

enter image description here

但是,如果我添加了更多项目,我希望列表视图高度停止增长,以使receView的最小高度不会变小:

enter image description here

如图所示,receiptVIew的最小高度为50dp。一旦收据视图达到该高度,它应该停止收缩,现在列表视图具有基于剩余空间的固定大小。其余的将是可滚动的。

我尝试了什么

我创建了一个列表视图。我有android:layout_alignParentTop="true"android:layout_height="wrap_content"

这将使其内容增长并位于视图的顶部

<ListView
    android:id="@+id/listViewProducts"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" >
</ListView>

我创建了一个RelativeLayout,它将保存一个单独的xml布局文件中的checkout_receipt_view。

对于此视图,我有android:layout_alignParentBottom="true"android:layout_below="@id/listViewProducts",它会在列表视图下方并与视图底部对齐。

我还使用了android:minHeight="50d"来设置receiptSection的最小高度。

<RelativeLayout
    android:id="@+id/receiptSection"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/listViewProducts"
    android:minHeight="50dp" >
    <include layout="@layout/checkout_receipt_view" />
</RelativeLayout>

listViewProducts随着项目的增长而增长,而receiptView正在正确占用剩余空间。

问题 但最小高度不起作用。列表视图不断增长,receiptSection将被推出视图。

当receiptView达到50dp时,有没有办法让listView停止增长?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

不幸的是,我认为最好的选择是通过创建扩展了ListView并覆盖onMeasure的自定义视图。

public class CustomView extends ListView {

    @Override
    int maxHeight = 0;
    View parentView = (RelativeLayout) (or whatever) getParent();
    if (parentView != null){
        maxHeight = parentView.getHeight() - 50;
    }
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

答案 1 :(得分:-1)

尝试交换'layout_below'。

你实际上说的是以下内容:请将我的亲戚放在列表视图之下。如果您希望列表视图尊重relativelayout的高度,您将不得不在列表视图中说:

 <ListView
    android:id="@+id/listViewProducts"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/receiptSection"
    android:layout_alignParentTop="true" >
</ListView>

你的亲戚:

<RelativeLayout
    android:id="@+id/receiptSection"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:minHeight="50dp" >
    <include layout="@layout/checkout_receipt_view" />
</RelativeLayout>