Android ListView高度包装到单个列表项的高度

时间:2015-01-03 21:58:22

标签: java android listview layout

我试图制作一个包含"两个"列表视图。 第一个高度应该等于单个列表项高度,第二个ListView的高度应该占用剩余空间。

有什么想法吗?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:baselineAligned="false"
android:divider="?android:attr/dividerHorizontal"
android:orientation="vertical" >

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_forecast"
    android:name=MyFragment"
    android:layout_width="fill_parent"
    android:layout_height="100dp"
    tools:layout="@android:layout/list_content" />

<FrameLayout
    android:id="@+id/fragment_wear"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

为什么人们-1这个!!如果您不知道答案,那么只需转移到另一个!

2 个答案:

答案 0 :(得分:0)

真正的问题是,你希望通过一个只显示1个项目的ListView来实现什么好处 - 为什么不在标准视图中显示该项?


如果你有一个固定高度的ListItem,你可以将其设置为android:layout_height属性:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">

  <ListView
    android:id="@+id/top_list_view"
    android:layout_width="match_parent"
    android:layout_height="?android:listPreferredItemHeight"
    android:background="@android:color/holo_green_dark" />

  <ListView
    android:id="@+id/bottom_list_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_blue_bright" />
</LinearLayout>

two listviews, with the top listview having a fixed height

答案 1 :(得分:0)

虽然我同意OP中的代码片段对问题没有贡献,但问题本身是非常合理的,我必须在我的项目中做同样的事情。

这样做的方式(假设列表中的所有项目具有相同的高度)是通过测量一次项目并将其高度分配给列表视图。这对我有用(适配器代码):

    private int cellHeight = -1;
    ...

    public override View getView(int position, View convertView, ViewGroup parent)
    {
        View view = context.LayoutInflater.Inflate(R.layout.list_item, null);
        ...

        if (cellHeight == -1)
        {
            // Measure the cell once and set this height on the list view. Won't work correctly if 
            // cells have different heights
            int UNBOUNDED = MeasureSpec.MakeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
            view.Measure(UNBOUNDED, UNBOUNDED);
            cellHeight = view.getMeasuredHeight();
            LayoutParameters para = listview.getLayoutParams();
            para.Height = cellHeight;
            listview.setLayoutParams(para);
        }

        return view;
    }