我试图制作一个包含"两个"列表视图。 第一个高度应该等于单个列表项高度,第二个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这个!!如果您不知道答案,那么只需转移到另一个!
答案 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>
答案 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;
}