SpannedGridLayoutManager 1.x到3.x升级完全指南:10分钟完成API迁移

📅 2026/8/27 18:18:04
SpannedGridLayoutManager 1.x到3.x升级完全指南:10分钟完成API迁移
SpannedGridLayoutManager 1.x到3.x升级完全指南10分钟完成API迁移【免费下载链接】SpannedGridLayoutManagerAndroid RecyclerView.LayoutManager that resizes and reorders views based on SpanSize项目地址: https://gitcode.com/gh_mirrors/sp/SpannedGridLayoutManagerSpannedGridLayoutManager是一个 Android RecyclerView 布局管理器能根据每个视图的 SpanSize宽高跨数自动调整大小并重新排序智能填满所有空隙打造瀑布流式混排网格。它的 1.x → 2.x → 3.x 三次大版本各有一处破坏性 API 变更。别担心整篇指南带你 10 分钟完成全部迁移改动量不到 10 行代码。一、三个版本的变更总览版本关键变更迁移成本1.x → 2.x用SpanLayoutParams替代RecyclerView.LayoutParams设置 SpanSize改 1 行2.x → 3.x删除SpanLayoutParams改用SpanSizeLookup提供 SpanSize改几行3.0.1 / 3.0.2修复 overscroll、视图回收等滚动问题直接升级核心原理该库用空闲矩形算法寻找空隙并决定视图落点详细推导见项目自带的论文 free_space_algorithm.pdf。二、第 1 步升级依赖1 分钟只需把版本号改成 3.0.2dependencies { implementation com.arasthel:spannedgridlayoutmanager:3.0.2 }三、第 2 步1.x → 2.x 的变更——SpanLayoutParams 登场2.x 之前SpanSize 直接借用RecyclerView.LayoutParams的宽高两个值来传递引发了严重的布局问题因此 2.0 引入了专用的参数类。1.x 旧写法onBindViewHolder中holder.itemView.layoutParams RecyclerView.LayoutParams(width, height)2.x 新写法holder.itemView.layoutParams SpanLayoutParams(SpanSize(width, height))SpanSize(width, height)表示该视图横向跨 width 格、纵向跨 height 格。定义见 SpannedGridLayoutManager.kt。四、第 3 步2.x → 3.x 的变更——SpanLayoutParams 退场 ⚡这是迁移中唯一真正的破坏性变更。3.x 为了修复回收与性能问题重写了整个布局与回收流程SpanLayoutParams不再需要你可以安全地把它从 Adapter 中全部删掉。取而代之的是在 LayoutManager 上设置SpanSizeLookup用法和原生GridLayoutManager的 spanSizeLookup 几乎一致val layoutManager SpannedGridLayoutManager( orientation SpannedGridLayoutManager.Orientation.VERTICAL, spans 4) layoutManager.spanSizeLookup SpannedGridLayoutManager.SpanSizeLookup { position - SpanSize(1, 1) // 每个视图默认占 1x1 } recyclerView.layoutManager layoutManager一个实用技巧如果你的 SpanSize 计算逻辑很复杂可以开启缓存spanSizeLookup.usesCache true数据变化后调用invalidateCache()使缓存失效即可。这两个 API 同样定义在 SpannedGridLayoutManager.kt 的SpanSizeLookup类中。五、理解布局原理空闲矩形如何填缝3.x 的精髓在于空隙填充每当一个视图需要落位算法先找到与它相邻或相交的空闲矩形把它切成上下左右四个子矩形再放回空闲列表。于是后面序号的视图如果恰好能填进更靠前的空隙会被提前摆放——这正是重排序的来源。需要注意的性能特性3.0 为保证布局正确会在每次整体重排时预计算并缓存全部视图的矩形。官方实测 1 万条数据约 55~135ms、5 万条约 200~530ms常规列表毫无压力若是无限滚动场景建议关注数据量增长带来的重排耗时。六、迁移后必查清单 ✅依赖已改为3.0.2Adapter 中所有SpanLayoutParams相关代码已删除已设置spanSizeLookup未设置时所有视图按 1x1 处理滚动位置恢复该管理器会改变屏幕上视图顺序默认禁用了滚动位置恢复。如果你确信 item 位置变化不大可开启spannedGridLayoutManager.itemOrderIsStable true需要 Item 变化动画时Adapter 中调用setHasStableIds(true)、覆写getItemId返回稳定 id并用notifyDatasetChanged()触发重排完整用法可参考示例工程 MainActivity.kt 与 GridItemAdapter.kt。七、迁移耗时小结步骤内容耗时1更新依赖版本~1 分钟2删除SpanLayoutParams2.x 用户~2 分钟3添加SpanSizeLookup~3 分钟4验证滚动位置与动画~4 分钟至此你的项目已完成 SpannedGridLayoutManager 从 1.x 到 3.x 的完整升级 【免费下载链接】SpannedGridLayoutManagerAndroid RecyclerView.LayoutManager that resizes and reorders views based on SpanSize项目地址: https://gitcode.com/gh_mirrors/sp/SpannedGridLayoutManager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考