Android ListView FooterView 在 item 比较少时底部无法填充屏幕的解决方案

在使用 ListView/RecyclerView 通过 addFooterView 添加底部 View,当 item 比较多时,底部 View 不需要处理可以随着列表滑动,

但是当你 item 比较少时,就会出现底部 View 不在底部的情况,下图左边

有如下解决方案:先得到 ListView 的高度 listViewHeight,然后得到 footerView 的顶部到父布局也就是 ListView 顶部的距离 footerViewTop,这样两个值一相减就得到 footerView 的顶部到父布局 ListView 的底部的距离 distance,然后把这个值 distance 和 footerView 的高度 footerViewHeight 相比较,如果大于就说明无法填满屏幕,我们就可以把这个 distance 设置为 footerView 的高度,这样就可以填充屏幕了,上面右边图。上代码:

        // footerView
        mFooterView = LayoutInflater.from(this).inflate(R.layout.item_footer_view, 
            (ViewGroup) mRecyclerView.getParent(), false);
        mFooterAdapter.addFooterView(mFooterView);
        mRecyclerView.setAdapter(mFooterAdapter);

        // 在 onCreate 中获取到的宽高是0,可以通过 view.post() 的方式在 post 方法里面获取到宽高。
        mRecyclerView.post(new Runnable() {
            @Override
            public void run() {
                int recyclerViewHeight = mRecyclerView.getHeight();
                // int footerViewTop = mFooterView.getTop();
                // 由于 BaseQuickAdapter 的 addFooterView 方法是将 footerView 添加到一个 LinearLayout 里面,
                // 然后再把这个 LinearLayout 添加到 RecyclerView 的底部。所以在这里算 footerView 顶部到 RecyclerView 的顶部距离时,
                // 就要先得到这个 footerView 的 父布局 LinearLayout,然后再通过 getTop 方法就可以得到 top 值。
                // ListView 的 BaseAdapter 自带 addFooterView,此方法里面没有嵌套 ViewGroup,可以通过 footerView.getTop() 直接得到 top 值。
                int footerViewTop = mFooterAdapter.getFooterLayout().getTop();
                int footerViewHeight = mFooterView.getHeight();
                if (recyclerViewHeight - footerViewTop > footerViewHeight) {
                    mFooterView.getLayoutParams().height = recyclerViewHeight - footerViewTop;
                }
            }
        });

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值