消息气泡
消息点击事件
您可以通过调用 addMessageClickListener 方法监听消息的点击事件。消息点击监听 MessageClickListener 的所有方法均为可选方法,可以按需实现。
提示
- 从
1.4.3版本开始,onMessageClick支持语音消息。 - 从
1.4.3版本开始,所有方法均增加Context、ClickEvent/GestureEvent参数。
警告
为了避免内存泄漏,请将监听保存,在必要的时候移除。
接口定义
TypeScript
/**
* 增加消息点击事件监听
* @param listener 监听
* @warning addMessageClickListener & removeMessageClickListener 配合使用,避免内存泄露
* @discussion 重复 add 同一个 Listener 对象,只有第一个 Listener 会被 add
*/
addMessageClickListener(listener: MessageClickListener): void;
参数说明
MessageClickListener
| 方法名 | 参数 | 返回值 | 说明 | 支持版本 |
|---|---|---|---|---|
onMessagePortraitClick | message: MessageuserId: stringcontext?: Contextevent?: ClickEvent | boolean | 消息头像点击事件。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 1.4.3+ |
onMessagePortraitLongClick | message: Messageuser: UserInfoModelcontext?: Contextevent?: GestureEvent | boolean | 消息头像长按事件。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 1.4.3+ |
onMessageClick | message: Messagecontext?: Contextevent?: ClickEvent | boolean | 消息点击事件。从 1.4.3 版本开始支持语音消息。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 1.4.3+ |
onMessageLongClick | message: Messagecontext?: Contextevent?: GestureEvent | boolean | 消息长按事件。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 1.4.3+ |
onMessageRecallEditClick | message: Messagecontext?: Contextevent?: ClickEvent | boolean | 消息撤回编辑事件。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 1.4.3+ |
onMessageLinkClick | message: Messageurl: stringcontext?: Contextevent?: ClickEvent | boolean | 文本消息超链接点击事件。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 1.4.3+ |
onMessageEmailClick | message: Messageemail: stringcontext?: Contextevent?: ClickEvent | boolean | 文本消息 Email 点击事件。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 1.4.3+ |
onMessagePhoneClick | message: Messagephone: stringcontext?: Contextevent?: ClickEvent | boolean | 文本消息手机号点击事件。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 1.4.3+ |
onMessageRightClick | message: Messagecontext?: Contextevent?: MouseEvent | boolean | 鼠标右键点击消息事件。返回 true 表示 App 处理该事件,SDK 不再处理;返回 false 表示由 SDK 处理 | 25.12.0+ |
示例代码
TypeScript
let msgClickListener: MessageClickListener = {
onMessagePortraitClick: (message: Message, userId: string, context?: Context, event?: ClickEvent) => {
// 消息头像点击事件
// true 由 App 处理该事件,SDK 不再处理。false 由 SDK 处理
return false;
},
onMessagePortraitLongClick: (message: Message, user: UserInfoModel, context?: Context, event?: GestureEvent) => {
// 消息头像长按事件
// true 由 App 处理该事件,SDK 不再处理。false 由 SDK 处理
return false;
},
onMessageClick: (message: Message, context?: Context, event?: ClickEvent) => {
// 消息点击事件
// true 由 App 处理该事件,SDK 不再处理。false 由 SDK 处理
return false;
},
onMessageLongClick: (message: Message, context?: Context, event?: GestureEvent) => {
// 消息长按事件
// true 由 App 处理该事件,SDK 不再处理。false 由 SDK 处理
return false;
},
onMessageRecallEditClick: (message: Message, context?: Context, event?: ClickEvent) => {
// 消息撤回编辑事件
// true 由 App 处理该事件,SDK 不再处理。false 由 SDK 处理
return false;
},
onMessageLinkClick: (message: Message, url: string, context?: Context, event?: ClickEvent) => {
// 文本消息超链接点击事件
// true 由 App 处理该事件,SDK 不再处理。false 由 SDK 处理
return false;
},
onMessageEmailClick: (message: Message, email: string, context?: Context, event?: ClickEvent) => {
// 文本消息 Email 点击事件
// true 由 App 处理该事件,SDK 不再处理。false 由 SDK 处理
return false;
},
onMessagePhoneClick: (message: Message, phone: string, context?: Context, event?: ClickEvent) => {
// 文本消息手机号点击事件
// true 由 App 处理该事件,SDK 不再处理。false 由 SDK 处理
return false;
},
}
RongIM.getInstance().conversationService().addMessageClickListener(msgClickListener);
修改消息气泡的 UI 配置
IMKit 从 1.4.3 版本开始支持通过 setConversationConfig 方法传入对应的 ConversationConfig 对象修改消息气泡的 UI 配置。支持设置的属性:边框圆角大小、边框色、背景色。
提示
仅支持初始化前的配置,若初始化后开发者设置,则不会生效。
修改边框圆角大小
边框圆角大小支持按消息方向来设置:
- 设置/获取接收的消息气泡边框圆角大小:
setReceivedMessageBorderRadius、getReceivedMessageBorderRadius - 设置/获取发送的消息气泡边框圆角大小:
setSentMessageBorderRadius、getSentMessageBorderRadius
接口定义
TypeScript
/**
* 设置接收的消息气泡边框圆角大小
*/
setReceivedMessageBorderRadius(borderRadius: BorderRadiuses): void
/**
* 获取接收的消息气泡边框圆角大小
*/
getReceivedMessageBorderRadius(): BorderRadiuses
/**
* 设置发送的消息气泡边框圆角大小
*/
setSentMessageBorderRadius(borderRadius: BorderRadiuses): void
/**
* 获取发送的消息气泡边框圆角大小
*/
getSentMessageBorderRadius(): BorderRadiuses
参数说明
BorderRadiuses
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
topLeft | number | 是 | 左上角圆角大小,单位为 vp |
topRight | number | 是 | 右上角圆角大小,单位为 vp |
bottomLeft | number | 是 | 左下角圆角大小,单位为 vp |
bottomRight | number | 是 | 右下角圆角大小,单位为 vp |
示例代码
TypeScript
let config = RongIM.getInstance().conversationService().getConversationConfig();
let receivedMessageBorderRadius: BorderRadiuses = {
topLeft: 4,
topRight: 8,
bottomLeft: 8,
bottomRight: 8
}
config.setReceivedMessageBorderRadius(receivedMessageBorderRadius);
RongIM.getInstance().conversationService().setConversationConfig(config);
修改边框色
边框色支持按消息方向来设置:
- 设置/获取接收的消息气泡边框色:
setReceivedMessageBorderColor、getReceivedMessageBorderColor - 设置/获取发送的消息气泡边框色:
setSentMessageBorderColor、getSentMessageBorderColor
接口定义
TypeScript
/**
* 设置接收的消息气泡边框色
* @param objectName 消息类型的 objectName,为空字符串表示所有消息类型
* @param color 边框颜色
*/
setReceivedMessageBorderColor(objectName: string, color: Color): void
/**
* 获取接收的消息气泡边框色
* @param objectName 消息类型的 objectName
*/
getReceivedMessageBorderColor(objectName: string): Color
/**
* 设置发送的消息气泡边框色
* @param objectName 消息类型的 objectName,为空字符串表示所有消息类型
* @param color 边框颜色
*/
setSentMessageBorderColor(objectName: string, color: Color): void
/**
* 获取发送的消息气泡边框色
* @param objectName 消息类型的 objectName
*/
getSentMessageBorderColor(objectName: string): Color
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
objectName | string | 是 | 消息类型的 objectName。为空字符串 "" 表示所有消息类型;指定具体值(如 "RC:TxtMsg")表示仅针对该消息类型 |
color | Color | 是 | 边框颜色 |
使用示例
示例 1:修改特定消息类型的边框色
通过指定消息的 objectName 仅 修改文本消息类型的边框色为灰色,其他消息类型不修改:
TypeScript
let config = RongIM.getInstance().conversationService().getConversationConfig();
config.setReceivedMessageBorderColor("RC:TxtMsg", Color.Gray);
RongIM.getInstance().conversationService().setConversationConfig(config);