import {
NativeModules,
} from 'react-native';
import IMUI from 'aurora-imui-react-native';
var MessageList = IMUI.MessageList;
var ChatInput = IMUI.ChatInput;
const AuroraIMUIController = IMUI.AuroraIMUIController; // the IMUI controller, use it to operate messageList and ChatInput.
// render() 中加入视图标签
<MessageList />
<ChatInput />
详情可以参考 iOS Android 示例
-
- Props 事件
- Props 自定义样式
- sendBubble
- receiveBubble
- sendBubbleTextColor
- receiveBubbleTextColor
- sendBubbleTextSize
- receiveBubbleTextSize
- sendBubblePadding
- receiveBubblePadding
- dateTextSize
- dateTextColor
- datePadding
- dateBackgroundColor
- dateCornerRadius
- avatarSize
- avatarCornerRadius
- isShowDisplayName
- isShowIncomingDisplayName
- isShowOutgoingDisplayName
- displayNameTextSize
- displayNameTextColor
- displayNamePadding
- eventTextColor
- eventTextSize
- eventTextPadding
- eventBackgroundColor
- eventCornerRadius
- eventTextLineHeight
- messageListBackgroundColor
- maxBubbleWidth
- messageTextLineHeight
- isAllowPullToRefresh
-
- Props customizable style
- Props 事件
- onSendText
- onSendGalleryFile
- onTakePicture
- onStartRecordVideo
- onFinishRecordVideo
- onCancelRecordVideo
- onStartRecordVoice
- onFinishRecordVoice
- onCancelRecordVoice
- onSwitchToMicrophoneMode
- onSwitchToGalleryMode
- onSwitchToCameraMode
- onSwitchToEmojiMode
- onTouchEditText
- onSizeChange
- onFullScreen
- onRecoverScreen
- onClickSelectAlbum
插入,更新,增加消息到 MessageList, 你需要使用 AuroraIMUIController (Native Module) 来发送事件到 Native。
参数:[{message}]
添加消息到 MessageList 底部,顺序为数组顺序。
example:
var messages = [{
msgId: "1",
status: "send_going",
msgType: "text",
text: "Hello world",
isOutgoing: true,
fromUser: {
userId: "1",
displayName: "Ken",
avatarPath: "ironman"
},
timeString: "10:00"
}];
AuroraIMUIController.appendMessages(messages);
参数:{message}
更新消息,可以使用该方法更新消息状态。
example:
var message = {
msgId: "1",
status: "send_going",
msgType: "text",
text: text,
isOutgoing: true,
fromUser: {
userId: "1",
displayName: "Ken",
avatarPath: "ironman"
},
timeString: "10:00",
};
AuroraIMUIController.updateMessage(message);
参数:[{message}]
将消息列表插入到聊天列表顶部。被插入的消息列表必须按照时间顺序排序。
example:
var messages = [{
msgId: "1",
status: "send_succeed",
msgType: "text",
text: "This",
isOutgoing: true,
fromUser: {
userId: "1",
displayName: "Ken",
avatarPath: "ironman"
},
timeString: "10:00",
},{
msgId: "2",
status: "send_succeed",
msgType: "text",
text: "is",
isOutgoing: true,
fromUser: {
userId: "1",
displayName: "Ken",
avatarPath: "ironman"
},
timeString: "10:10",
},{
msgId: "3",
status: "send_succeed",
msgType: "text",
text: "example",
isOutgoing: true,
fromUser: {
userId: "1",
displayName: "Ken",
avatarPath: "ironman"
},
timeString: "10:20",
}];
AuroraIMUIController.insertMessagesToTop(messages);
param: string
根据消息 id 删除消息
example:
AuroraIMUIController.removeMessage("1")
清空所有消息
example:
AuroraIMUIController.removeAllMessage()
隐藏 inputView 的展开视图。
AuroraIMUIController.hidenFeatureView()
停止正在播放的音频,这里会停止所有的声音,包括 ChatInput 和 MessageList 正在播放的声音。
example:
AuroraIMUIController.stopPlayVoice()
-
addMessageListDidLoadListener(cb)
AuroraIMUIController
初始化会先于MessageListView
完成,如果需要调用对MessageListView
的所有操作(添加消息,删除消息,更新消息)需要在MessageListDidLoad
事件触发后才会起作用。example:
AuroraIMUIController.addMessageListDidLoadListener(()=> { // do something ex: insert message to top })
-
removeMessageListDidLoadListener(cb)
取消对
MessageListDidLoad
事件的监听。example:
AuroraIMUIController.removeMessageListDidLoadListener(cb)
PropTypes.function: ( message ) => { }
点击头像触发。
message 参数为:{ "message": message) }。
PropTypes.function: (message) => { }
点击消息气泡触发。
message 参数为:{ "message": message }。
PropTypes.function: (message) => { }
点击消息状态按钮触发。
message 参数为:{ "message": message }。
PropTypes.function: () => { }
滚动 MessageList 到顶部时,下拉触发, 案例用法: 参考 sample 中的聊天组件中的 onPullToRefresh 方法。
**Android 中,需要把该事件放到 AndroidPtrLayout
下,可以参考 sample/app/app.js **
PropTypes.function: () => { }
点击消息列表触发。
PropTypes.function
开始滑动消息列表的时候触发,用于调整布局。
在 Android 中,如果你想要自定义消息气泡,你需要将一张点九图放在 drawable 文件夹下。 点九图介绍,sample 项目的 drawable-xhdpi 文件夹下有示例。 在 iOS 中,如果想自定义消息气泡,需要把消息气泡图片加入到工程中,然后再 sendBubble.imageName 指定图片名字。
PropTypes.object:{ imageName: string, padding: { left: number,top: number,right: number,bottom: number}
设置发送方的气泡样式。
PropTypes.object:{ imageName: string, padding: { left: number,top: number,right: number,bottom: number}
设置接收方的气泡样式。
PropTypes.string:
设置发送消息的文本颜色,sendBubbleTextColor="#000000"
。
PropTypes.string
设置接收消息的文本颜色,sendBubbleTextColor="#000000"
。
PropTypes.number
设置发送消息的文本大小,单位点。
PropTypes.number
设置接收消息的文本大小,单位点。
PropTypes.object: { left: number, top: number, right: number, bottom: number }
发送消息泡泡的内边距。
PropTypes.object: { left: number, top: number, right: number, bottom: number }
接收消息泡泡的内边距。
PropTypes.number:
消息时间文字的尺寸大小,单位点。
PropTypes.string:
消息时间文字的颜色, dateTextColor="#000000"
。
PropTypes.object: = { left: number, top: number, right: number, bottom: number}
设置时间的内边距。
Example: datePadding={left: 5, top: 10, right: 5, bottom: 10}
PropTypes.string
设置时间的背景颜色。
Example: dateBackgroundColor={"#cecece"}
PropTypes.number
设置时间的背景圆角大小。
Example: dateCornerRadius={5}
PropTypes.object: { width: number, height: number }
这个对象有宽高两个属性,Example: avatarSize = {width: 50, height: 50}
。
PropTypes.number:
设置头像圆角半径。
Example: avatarCornerRadius = {6}
。
PropTypes.bool:
是否显示昵称(包括接收方和发送方),Example: isShowDisplayName={ture}
。
PropTypes.bool:
设置是否显示接收方昵称。
Example: isShowIncomingDisplayName={true}
PropTypes.bool:
设置是否显示发送方昵称。
Example: isShowOutgoingDisplayName={false}
PropTypes.number
设置昵称文字大小。
Example: displayNameTextSize={14}
PropTypes.string
设置昵称的文字颜色。
Example: displayNameTextColor={"#cecece"}
PropTypes.object = {left: number, top: number, right: number, bottom: number}
设置昵称内边距。
Example: displayNamePadding={left: 5, top: 0, right: 0, bottom: 5}
PropTypes.string:
设置消息列表背景颜色。
Example: messageListBackgroundColor={"#f3f3f3"}
PropTypes.number
设置气泡的最大宽度。值为屏幕宽度的百分比。
Example: maxBubbleWidth={0.7}
表示设置气泡的最大宽度为屏幕宽度的 70%。
PropTypes.number
设置文字消息的行间距。
Example: messageTextLineHeight={5}
PropTypes.bool:
是否开启下拉刷新功能,Example: isAllowPullToRefresh={ture}
。
PropTypes.string:
自定义 ChatInput 组件和布局。
Eample:
// 可以在 ChatInput 的 left/right/bottom 放置各功能 item,(不可以重复)
customLayoutItems={{
left: ['voice'],
right: ['send'],
bottom: ['gallery','emoji','camera']
}}
// 如果 left/right/bottom 没有提供则不会显示,直接隐藏。
customLayoutItems={{
left: ['voice'],
right: ['send']
}}
PropTypes.string:
设置输入组件背景颜色。
Example: chatInputBackgroundColor="#000000"
PropTypes.bool:
设置选择相册按钮的可见性。
Example: showSelectAlbumBtn={true}
PropTypes.bool:
设置视频录制按钮的可见性。
Example: showRecordVideoBtn={true}
PropTypes.object: {left: number, top: number, right: number, bottom: number}
设置输入框内边距。
Example: inputPadding={left:5, top:0, right:5, bottom:0}
PropTypes.string: {"#xxxxxx"}
设置输入框文字颜色。
Example: inputTextColor={"#808080"}
PropTypes.numbser: {numbser}
设置输入框文字大小。
Example: inputTextSize={14}
PropTypes.number:{numbser}
设置输入框行间距。
Example: inputTextLineHeight={2}
PropTypes.number:
设置拍摄的照片质量,取值 0.01 ~ 1(原图),默认 0.5。
Example: cameraQuality={0.6}
PropTypes.function: (result) => {}
输入文字后点击发送按钮触发,result 参数为 {text: string}
。
PropTypes.function: (result) => {}
选中视频或图片后点击发送按钮触发,result 参数为 {mediaFiles: [string]}
, 图片路径数组。
PropTypes.function: (result) => {}
点击拍照按钮触发, result 参数为 {mediaPath: string}
。
PropTypes.function: () => {}
点击录制视频按钮触发。
PropTypes.function: (result) => {}
完成录制视频触发,result 参数为 {mediaPath: string, duration: number}
。
PropTypes.function:
取消录制视频触发。
PropTypes.function:() => {}
点击录音按钮触发。
PropTypes.function: (result) => {}
录音完成后松开手指触发,result 参数为 {mediaPath: string, duration: number}
。
PropTypes.function:() => {}
手指移动到取消录音区域后,抬起手指触发。
PropTypes.function: () => {}
点击菜单栏麦克风按钮触发。
PropTypes.function: () => {}
点击菜单栏图片按钮触发。
PropTypes.function: () => {}
点击菜单栏拍照按钮触发。
PropTypes.function: () => {}
点击菜单栏表情按钮触发。
PropTypes.function: ({width: number, height: number}) => {}
输入组件尺寸变更时触发 (建议使用这个方法来处理 inputView 的尺寸变化)。
PropTypes.function: () => {}
当摄像机全屏的时候触发这个回调(例如:可以在摄像机全屏的时候隐藏系统状态栏)。
PropTypes.function: () => {}
摄像机取消全屏的时候触发这个回调
PropTypes.function: () => {}
(Android only)
点击选择相册按钮触发(选择相册按钮默认是可见的,可以通过 showSelectAlbumBtn 改变 )
PropTypes.function: (Android only)
点击输入框触发。