PagerLayoutManager
具有分页功能的 Recyclerview 布局管理器,主打分页,可以替代部分场景下的网格布局,线性布局,以及一些简单的ViewPager,但也有一定的局限性,并不能适用于所有场景,请选择性使用。
另外,该库并不是特别完善,欢迎提交 Issues 或者 PR 来协助我完善。
1. 效果预览
2. 支持的特性
- 网格布局,设置合适的行列数可以模拟线性布局或者ViewPager。
- 分页效果,支持自动回调页码的变化(总页数和当前页数)。
- 布局方向,支持横向滚动和垂直滚动。
- 方向切换,支持切换滚动方向。
- 支持电视,支持TV上按键翻页。
- 内存稳定,不会因为一次性添加大量的数据导致内存飙升或者严重卡顿。
- 使用简单,无侵入性,可以快速的将其他布局替换为该布局,也可以快速的移除该布局。
- 自动修正,当滚动到第3页,删除数据后内容只够2页,会自动修正当前页面为第2页。
3. 主要文件
名称 | 作用 |
---|---|
/java/PagerGridLayoutManager.java | 水平分页网格布局管理器。 |
/java/PagerGridSnapHelper.java | 滚动辅助工具。 |
/java/PagerConfig.java | Pager配置,用于开关调试日志。 |
4. 使用方法
4.1 基本用法
注意:
1. 一定要在先设置 PagerGridLayoutManager, 之后再设置 PagerGridSnapHelper。
2. 注意名称 PagerGridSnapHelper 不是 PagerSnapHelper。
// 1.水平分页布局管理器
PagerGridLayoutManager layoutManager = new PagerGridLayoutManager(
2, 3, PagerGridLayoutManager.VERTICAL);
layoutManager.setPageListener(this); // 设置页面变化监听器
recyclerView.setLayoutManager(layoutManager);
// 2.设置滚动辅助工具
PagerGridSnapHelper pageSnapHelper = new PagerGridSnapHelper();
pageSnapHelper.attachToRecyclerView(recyclerView);
页面变化监听器
// 当总页数确定时的回调
@Override public void onPageSizeChanged(int pageSize) {
Log.e("TAG", "总页数 = " + pageSize);
}
// 当页面被选中时的回调(从 0 开始)
@Override public void onPageSelect(int pageIndex) {
Log.e("TAG", "选中页码 = " + (pageIndex+1));
}
4.2 其他设置
是否在滚动过程中回调页码变化。
// 如果不想在滚动个过程中回调页码变化,可以这样设置(v1.1.0-beta 以上版本支持)
layoutManager.setChangeSelectInScrolling(false);
切换滚动方向
注意:滚动过程中不可切换方向,设置无效。
mLayoutManager.setOrientationType(PagerGridLayoutManager.HORIZONTAL);
打开调试日志。
// 如果需要查看调试日志可以设置为true,一般情况忽略即可
PagerConfig.setShowLog(true);
5. 注意事项:
目前存在一个问题,使用的时候请务必给 RecyclerView 设置固定大小或者match_parent,如果不设置默认高度为 0 ,则任何内容都不会显示出来。
6. 添加方式
6.1 添加仓库
在项目的 build.gradle
文件中配置仓库地址。
allprojects {
repositories {
jcenter()
// 私有仓库地址
maven { url "http://lib.gcssloop.com/repository/gcssloop-central/" }
}
}
6.2 添加项目依赖
在需要添加依赖的 Module 下添加以下信息,使用方式和普通的远程仓库一样。
compile 'com.gcssloop.support:pagerlayoutmanager:1.3.1@aar'
7. 待优化
- 添加 scrollToPosition。
- 添加设置滚动速度。