Android 動態設置 ListView 和 GridView 高度
1 需求分析
我們可能會有這樣的需求,ListView添加了一個頭部,然后頭部里面有一個ListView或者GridView,當你按照正常的方式給頭部的ListView或者GridView設置數據的時候,發現它只能顯示一行!!!這可不是我想要的。
那么怎么辦呢?最直接的辦法,就是在xml布局中給頭部的ListView或者GridView設置固定的高度。雖然這樣可以出來效果,但是顯然不是我想要的。因為數據不能確定,高度也不會固定,設置固定高度怎么可以!!!
既然如此,那就在代碼中為他們動態設置高度吧。
最重要的,也是最關鍵的就是怎么計算ListView和GridView的高度。
2 算法分析
ListView
要計算ListView的高度,很簡單啊。首先,得知道有多少條數據,循環計算每一條item的高度,把他們相加就得出了總的高度。
GridView
要計算GridView的高度,方法類似,只不過要考慮到列數。比如有12條數據,設置為5列,那么就有三行數據。只要我們得到每一行的高度,然后再相加,就是我們想要的結果。
3 代碼實現
ListView
//為listview動態設置高度(有多少條目就顯示多少條目)
public void setListViewHeight(ListView listView) {
//獲取listView的adapter
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
//listAdapter.getCount()返回數據項的數目
for (int i = 0,len = listAdapter.getCount(); i < len; i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
// listView.getDividerHeight()獲取子項間分隔符占用的高度
// params.height最后得到整個ListView完整顯示需要的高度
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter .getCount() - 1));
listView.setLayoutParams(params);
}
//使用方式,必須刷新Adapter
setListViewHeight(listView);
listViewAdapter.notifyDataSetChanged();
GridView
public void setGridViewHeight(GridView gridview) {
// 獲取gridview的adapter
ListAdapter listAdapter = gridview.getAdapter();
if (listAdapter == null) {
return;
}
// 固定列寬,有多少列
int numColumns= gridview.getNumColumns(); //5
int totalHeight = 0;
// 計算每一列的高度之和
for (int i = 0; i < listAdapter.getCount(); i += numColumns) {
// 獲取gridview的每一個item
View listItem = listAdapter.getView(i, null, gridview);
listItem.measure(0, 0);
// 獲取item的高度和
totalHeight += listItem.getMeasuredHeight();
}
// 獲取gridview的布局參數
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight;
gridview.setLayoutParams(params);
}
//使用方式,必須刷新Adapter
setGridViewHeight(gridView);
gridViewAdapter.notifyDataSetChanged();
來自:http://www.jianshu.com/p/141ca9c140e4
本文由用戶 jiazhibin 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!