最近遇到一個項目需求是:
在列表的底部添加幾句話。
當列表不足一屏時,需要放在頁面底部;
如下圖:
當列表一屏多時,需要放在最後一條數據的下面;
如下圖:
如果只是使用ListView的addFooterView(View view)
是無法滿足需求的,因爲在不滿一屏時,這個view是會跟在上面而不會置底。所以需要我們動手計算一下高度。代碼如下:
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_footer);
mListView = (ListView) findViewById(R.id.listView);
//添加數據
List<ChartBean> list = new ArrayList<>();
for (int i = 0; i < 50; i++) {
ChartBean bean = new ChartBean();
bean.setDate("這是第 " + (i + 1) + " 行");
list.add(bean);
}
//這是一個普通的adapter
ListFooterAdapter adapter = new ListFooterAdapter(this, list);
mListView.setAdapter(adapter);
mListView.post(new Runnable() {
@Override
public void run() {
BottomView bottomView = new BottomView(ListFooterActivity.this);
//頁面的height = 屏幕height - 狀態欄height
int activityHeight = ScreenTools.getInstance(ListFooterActivity.this).getScreenHeight() - ScreenTools.getInstance(ListFooterActivity.this).getStatusBarHeight();
//當不滿一屏時,獲取listview到頁面底部的高度差
int bottomViewHeight = activityHeight - mListView.getBottom();
if (bottomViewHeight > ScreenTools.getInstance(ListFooterActivity.this).dip2px(85)) {
//85是我要添加的View的粗略高度dp值,重新賦值給bottomView
bottomView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, bottomViewHeight));
}
mListView.addFooterView(bottomView);
}
});
}
其實說白了就是隻關心頁面不足一屏時,讓BottomView的高度佔滿剩餘空間就行了。
以上。