1. 效果图
2. 需求
- 当数据量比较少不足一屏的时候,footer跟随数据库
- 当数据量多于一屏的时候,footer固定在底部
3. 分析
- 我们可以新建一个View作为footer,同时将这个View复制一份固定在底部,初始设置为invisible
- 数据量小的时候,footer默认就是跟随着ListView的,将底部View设置为invisible。数据量多的时候,将底部的View设置为visible显示出来,默认就会覆盖掉footer。
- 在ListView的scroll监听中对数据量的大小进行判断。如果可见项小于总项目,那么可以肯定的是数据量是多于一屏的。
- 如果可见项等于总项目,那么要么是不足一屏,要么最后一项footer已经部分展示在屏幕上了。可以根据footer的top值和底部View的top值进行判断。
- 如果footer的top值比底部View的top值小,则说明数据量不足一屏;反之则否。
- 加入了header或者footer后,可见项与总项目是会包含header和footer的。
4. 代码
共用xml文件,作为footer和底部View的
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#C3C3C3"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="80dp" />
</LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"