消息布局观察:周边头像,昵称,间距 ,气泡 及其他统一,内容视图挖空; 采取自定义注入视图配置;
从CellFor 方法说起;聊天消息页面,我们看到 有 聊天消息 还有时间戳;根据 ModelItem项 的 class类型 分别去创建 两种cell ; 只里只讲 聊天消息cell;
流程:当为聊天消息Model 时候,名 messageModel(messageModel 里面 大致有以下属性: 记录消息模型,消息布局,头像,昵称 显示控制,消息内容size; (不足 后补)); 取得消息布局; 相对应的content类字符串;根据 identify = content 去重用cell (不同消息类型重用标识不同 ); 创建MessageCell 根据 content 去创建 对应的内容视图 即可;再刷新视图数据 赋值;
布局来源:定义 一个 layoutconfigInterface;
layoutconfig 配置包含:{
1)message的内容大小;
2)需要创建显示的CellContent 类名
3)气泡的配置间距等
4)控制是否显示头像
5)控制是否 显示昵称
6)控制消息显示在左边还是在右边 (是否是自己发的)
}
Content来源
1、contentConfigInterface 接口:
考虑到message的内容大小 和 cellContent 类名 是 属于 CellContent 配置; 于是 考虑用一个 cellConentConfigFactory 的工厂来生产这些配置 ;
2、contentConfigInterface 实列
message的内容大小 和 cellContent 类名 抽出来 定义一个接口 ContentConfigInterface;
(考虑到有文本配置,图片配置,以及图文配置,后期 的扩展 声音配置,红包配置 , 好友分享配置) 准备一个超级父类
BaseContentConfig (具有message属性,方便计算message内容的大小); 后期配置只需继承 BaseContentConfig、实现ContentConfigInterface 接口 方法即可;
3、最终要把配置contentConfigInterface 这样的实列 反馈给 布局管理器; 为了不暴露太多的详细contentConfig 细节 以及 低耦合;用一个
ConentConfigFactory 工厂生产这些配置玩意 ,根据消息类型 返回 消息内容配置 contentConfig (工厂单列,实列化的时候 创建了一个Map或者字典, 记录了消息类型 对应的 消息contentConfig;)