我有一个可扩展的列表视图,以编程方式填充。我希望有可扩展列表视图的固定长度,并在每个组内滚动而不是整个列表。
我的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/ll_price_list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/theme_blue"
android:orientation="horizontal"
android:weightSum="8" >
<TextView
android:id="@+id/tv_pricelisthead_item"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:gravity="left"
android:text="PRICING"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_pricelisthead_np"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="2"
android:gravity="center"
android:text="NORMAL"
android:textColor="@color/white"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_pricelisthead_ep"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="2"
android:gravity="center"
android:text="EXPRESS"
android:textColor="@color/white"
android:textSize="18sp" />
</LinearLayout>
<!--
android:background="@drawable/hf_bg"
<TextView
android:id="@+id/tv_price_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="16dp"
android:text="Price List"/>
-->
<ExpandableListView
android:id="@+id/elv_pricelist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:transcriptMode="alwaysScroll" >
</ExpandableListView>
</LinearLayout>
使用上面的布局我可以得到一个列表视图。 我希望这个listview占用固定的长度。应始终显示标题,并且内部子项目的滚动应该不在整个列表中。 我只有3组,每组可能有大约10-30个儿童用品。
答案 0 :(得分:0)
我在一段时间后发现了这个代码,我试图搜索这个,但找不到它。如果有人,请编辑我的答案并提供原始答案的链接。由于ExpandableListView
扩展ListView
,您可以使用此代码,但请确保在适配器中已经扩展了子代。
private void justifyListViewHeightBasedOnChildren(ListView listView) {
ListAdapter adapter = listView.getAdapter();
if (adapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View listItem = adapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams par = listView.getLayoutParams();
par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
listView.setLayoutParams(par);
listView.requestLayout();
}