Android站内信设计(无代码)
Android站内信设计
-
- 一、前言
- 二、位置
- 三、点击之后的界面
-
- 1.UI分析
- 2.各个控件
- 四、主界面**UI**设计
-
- 1.button的处理
-
- ①:粉丝button
- ②:评论button
- ③:通知button
- 2.会话列表处理
- 五、消息中间件的应用
- 六、总结
一、前言
这是app纯理论设计的第一篇,主要记录平时设计界面的过程,主要涉及一些UI的设计和一些逻辑的设计,如果你有开发过一些demo相信应该可以看懂的,真正实现一个站内信的设计相当困难,如果没有一定的基础,将寸步难行,这个系统准备留到考研结束进行着手代码的实现,当然我也鼓励大家实现一个,真的实现的朋友私我,我会送出一份礼物以示鼓励。对标网易云的站内信设计,由于时间上的原因,图均为手画的字写得不好看多多见谅,如果对UI感兴趣的朋友可以看看网易云UEDC团队出版的《以匠心,致设计》.
二、位置
这部分位于侧边导航栏的首个Item,这个设计是为了提高用户的体验,站内信作为点击次数最多的模块排在越前面越好,设计图稿如下
这部分由背景+图标+文字构成,事实上只需要对最外层得itemView进行处理即可,这部分得主要布局是采用cardView设计的。
三、点击之后的界面
1.UI分析
进入界面会有一个标题栏和一个加载会话的过渡动画,过渡动画结束后会话列表正式刷新完毕,这个过程中完成了两项任务,主线程加载UI动画,开启另外一个子线程完成数据的拉取,然后拉取完毕handle通知一下,使得UI停止过渡动画正式加载会话数据。
-
过渡动画的加载
这里推荐到Lottie官网找相关的free动画,然后界面刚进入先展示过渡动画
-
服务端会话数据的拉取
这部分开启子线程处理网络请求相关的,然后赋值给viewModel,请求结束用handle提醒一下主线程
2.各个控件
整体上由标题栏+过渡动画组成
-
①:back 比较简单,销毁当前的activity即可
-
②:text 普通的文字显示,无需注册事件
-
③:imageView/imageButton,这里更倾向于使用imageButton,图像比较小,不需要太清晰的显示可以使用button,这个清理全部未读的功能需要完成两个部分的处理,首先需要本地UI的更新,其次就是服务端数据的刷新,这部分可以先本地服务端开一个线程去执行网络请求的操作,刷新完毕toast一个“清空所有已读成功”,当然本地的红点肯定先一步完成消除。
-
④:搜索站内消息,这部分可以配合数据库模糊搜索完成,具体可以定位到某个对话的某条消息
四、主界面UI设计
1.button的处理
①:粉丝button
- 整体上的关系设计
现在大部分应用都有这个粉丝关注等等社交功能,主要用于订阅各种消息,这部分需要设计数据库模型
一般而言有两种模式
a.博主和粉丝 1:n 这个比较适合官方号之类的消息订阅等等
b.博主和粉丝 m:n 这种模式就是目前最流行的设计,可以双向关注等等
-
注意事项
每名粉丝和博主的会话是唯一的,粉丝和博主之间可以有多条消息
设置主次关系用于判断二者的关注状态
-
关系表的设计
user1,user2,relationship,sessionUid这几个字段,user1和user2表示二者之间不存在字段上的优先关系,relationship表示二者的主从关系
relationUid的取值
user1 表明user1为博主 user2 表明user2为博主 both 相互关注 对于表中数据的插入
sessionUid为主键,两位用户之间有且只有一个会话,这里sessionUid用于消息的收发,session表包括sessionUid和message两个字段,可以采用nosql数据库进行存储,类似redis,其中message利用json字符串进行存储,最后客户端即安卓端进行处理
"{"send":user1,"message":"hello","time":"20220516"}"
send用于区分发送人
一般习惯右边为用户自己,当然各国的习惯不同,国际化时可以考虑设置一下,消息中的send与本地的用户判断一下即可。
聊天列表设计浅谈
一种想法是Item设置两个聊天的消息体,然后实际传入数据时判断一下,隐藏掉一个即可
另一种想法时设计多列表的adapta,一个列表可以插入多种的Item
至此数据库表的设计完成
粉丝的界面设计
①头像:头像,粉丝个人信息拉取
②③名字、签名:名字和签名也是一样的
④回关:button 将relation表中的relationship字段修改即可
⑤取关:将这个关系删除或者修改即可,主要对relationship表进行修改
至此粉丝button设计完毕,至于点击列表中的item跳转到个人界面就不属于这里讨论的范畴了
②:评论button
这个Imagebutton用于查看例如发的贴子下面的回复,这里涉及数据绑定相关,仍然不在讨论范围内(一个系统往往需要和好几个系统进行通信,确实真正做一个难度很大)
这个itemView可以采用线性布局作为父布局,约束布局作为右侧的嵌套布局
我的评论那一块采用cardview即可,忌讳采用单一布局,虽然线性布局通过多种嵌套可以完成大多数界面的设计,有几个缺点,写的重复代码太多了,嵌套太深不利于界面的绘制,这部分数据可以采用帖子的id和comment的id获取。
③:通知button
这个imagebutton主要用于数量可能比较多的外部互动通知,例如点赞通知等等
①②:是操作者的个人信息
③④:操作类型、内容
⑤:操作时间
2.会话列表处理
这部分属于即时通讯的范畴,只谈谈消息处理的部分,可以参考之前的一篇即时IM的设计
至此界面已经完全从理论上实现了,接下来谈谈今天的逻辑主角—消息中间件
五、消息中间件的应用
这部分用到了微消息中间件MQTT和RocketMQ消息中间件,MQTT用于安卓端的消息订阅和分发,RocketMQ用于服务端应用的订阅和分发
这里仅简单介绍一下,具体代码部分需要学习相关的用法,这个消息机制可以实现站内消息的分发,主要用到的就是这两个中间件,至于配合使用,这部分较为困难,就不详细介绍了,至此,纯理论的站内消息设计完毕。
六、总结
主界面的会话列表利用IM进行获取,只需设置相关的监听器即可,通知方面考虑MQTT和RocketMQ配合实现,最后,想说的是一个看似非常不起眼的功能实现起来可不那么容易,这部分前后端代码开发起来到真正上线,就我的速度至少需要一周以上,实际比理论难多了,等考研上岸了再来实现吧。