我使用此方法在运行时计算和设置listview高度
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();
}
<?xml version="1.0" encoding="utf-8"?>
<ListView
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/lv_cart" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimary"
android:layout_margin="10dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginRight="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SubTotal:"
android:textSize="18sp"
android:textColor="#000"
android:textStyle="bold"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Rs. 600"
android:layout_marginLeft="5dp"
android:textStyle="bold"
android:textSize="18sp"
android:textColor="@color/colorPrimary"
android:id="@+id/tv_sub_total"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorPrimary"
android:layout_margin="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Choose Order Type:"
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:textSize="20sp"
android:textColor="#4CAF50"
android:textStyle="bold"/>
<Button
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:text="Delivery"
android:textAllCaps="false"
android:textSize="18sp"
android:textColor="#ffffff"
android:background="@color/colorPrimary"
android:id="@+id/btn_delivery"/>
<Button
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:text="PickUp"
android:textAllCaps="false"
android:textSize="18sp"
android:textColor="#ffffff"
android:background="@color/colorPrimary"
android:id="@+id/btn_pickup"/>
</LinearLayout>
</ScrollView>
我调试此方法并检查此方法是否根据子项返回正确的高度。但是当显示listview时,显示列表的视图不正确。 我在listview中添加了8个项目,但是当我运行它时它只显示5个,但是返回的方法的高度是正确的,因为它显示1个视图高度= 51和8个视图高度= 415,包括分隔符高度。 我也在xml中尝试了listview高度,匹配父级和换行内容,但结果相同。
这里有什么问题?
答案 0 :(得分:0)
listView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, the height here));