手机屏幕尺寸有限,几乎每个 app 的内容区,都会用列表呈现。不信可以打开你手机里的任意一个 app 看看,99%的 app 的内容区都能被抽象成一个大列表。只是根据内容的丰富度,列表的复杂度有所不同。内容区的结构骨架,基本上就是由列表布局奠定的。从这点看,虽然还有其他各种类型的布局,但是它们都没有列表型的布局来得重要。
总的来说,必须知道的有 如何应对多类型复杂结构、几个滚动相关的实用的特别交互、和使用 RecyclerView 注意要填的坑。这些足以覆盖 90% 的业务场景。
(Android 的列表布局多由RecyclerView实现,以下内容均基于RecyclerView)
应对复杂结构列表
我安利 MultiType 。
从前,比如我们写一个类似微博列表页面,这样的列表是十分复杂的:有纯文本的、带转发原文的、带图片的、带视频的、带文章的等等,甚至穿插一条可以横向滑动的好友推荐条目。不同的 item 类型众多,而且随着业务发展,还会更多。如果我们使用传统的开发方式,经常要做一些繁琐的工作,代码可能都堆积在一个 Adapter 中:我们需要覆写 RecyclerView.Adapter 的 getItemViewType 方法,罗列一些 type 整型常量,并且 ViewHolder 转型、绑定数据也比较麻烦。一旦产品需求有变,或者产品设计说需要增加一种新的 item 类型,我们需要去代码堆里找到原来的逻辑去修改,或找到正确的位置去增加代码。这些过程都比较繁琐,侵入较强,需要小心翼翼,以免改错影响到其他地方。
现在好了,我们有了 MultiType,简单来说,MultiType 就是一个多类型列表视图的中间分发框架,它能帮助你快速并且清晰地开发一些复杂的列表页面,数据驱动视图。 它本是为聊天页面开发的,聊天页面的消息类型也是有大量不同种类,且新增频繁,而 MultiType 能够轻松胜任。
列表滚动速度控制
通过自定义 LayoutManager 的 SmoothScroller。
public class WrapContentLinearLayoutManager extends LinearLayoutManager {
private static float MILLISECONDS_PER_INCH = 25f; /