今天開發遇到一個問題,就是當動態插入ListView數據的時候,由於之前ListView的高度已經固定死了,所以顯示不完整的數據,並且底部顯示黑邊。如圖:
而我希望這個ListView可以動態的改變高度:
當時第一個想到的解決辦法就是在setAdapter之後去重新修改ListView的高度,但是發現設置match_parent或wrap_content沒有效果,只能設置一個固定的高度。但是顯然我的數據長度是不定的,所以設置固定高度不顯示。
最後採用的辦法是:
[java] view plaincopy
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);
}
[html] view plaincopy
<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" // 邊界黑邊
/>