最近遇到一个项目需求是:
在列表的底部添加几句话。
当列表不足一屏时,需要放在页面底部;
如下图:
当列表一屏多时,需要放在最后一条数据的下面;
如下图:
如果只是使用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的高度占满剩余空间就行了。
以上。