今天開發遇到一個問題,就是當動態插入ListView資料的時候,由於之前ListView的高度已經固定死了,所以顯示不完整的資料,並且底部顯示黑邊。
而我希望這個ListView可以動態改變高度:
當時第一個想到的解決辦法就是在setAdapter之後去重新修改ListView的高度,但是發現設定match_parent或wrap_content沒有效果,只能設定一個固定的高度。但是顯然我的資料長度是不定的,所以設定固定高度不顯示。
最後採用的辦法是:
public void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { 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)); ((MarginLayoutParams) params).setMargins(10, 10, 10, 10); // 可刪除 listView.setLayoutParams(params); }
<ListView android:id="@+id/getInfo" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#FFF4F4F4" android:dividerHeight="0.0dip" android:fadingEdge="none" // 邊界黑邊 />