页面 | 位置 | 定制点 | 定制方式 |
---|---|---|---|
全局 | 顶部导航栏 | 背景色、文字颜色等样式 | 系统API |
全局 | 顶部导航栏 | 导航按钮 | 在各个Controller的setViewDidLoadBlock: 中调用系统API |
全局 | 自定义皮肤包 | 可以只包含需要修改的资源 | 参考exampleCustomUISkin |
全局 | 全局主题色 | 【plist】 Global-TintColor 【plist】是指IM UI资源包中的 OpenIM-Theme.plist 文件,下同 |
|
全局 | TableView | 分割线、背景色、Cell文字颜色、Cell背景色等 | OpenIM-Theme.plist中TableView- |
全局 | 头像样式 | 头像样式 | setAvatarImageViewContentMode: setAvatarImageViewCornerRadius: |
全局 | 事件处理 | 打开URL | 参考exampleListenOnClickUrl |
全局 | 事件处理 | 预览图片 | setPreviewImageMessageBlock: |
全局 | 事件处理 | 点击头像 | 参考exampleListenOnClickAvatar |
全局 | 事件处理 | 提示信息 | setShowNotificationBlock: |
会话列表 | 未读数 | 文字颜色,背景色 | 【plist】ConversationList-UnreadText ConversationList-UnreadBackground |
会话列表 | 置顶会话 | 背景色,分割线 | 【plist】 ConversationList-MarkOnTop-BackgroundColor ConversationList-MarkOnTop-SeperatorColor |
聊天页面 | 聊天背景 | 替换资源包图片 | |
聊天页面 | 输入区域 | 主题色 | 【plist】 MessageInputView-Tint-Color |
聊天页面 | 输入区域 | 输入区域背景色 | 【plist】 MessageInputView-BackgroundColor |
聊天页面 | 输入区域 | 输入框 | 【plist】 MessageInputView-TextField-TextColor MessageInputView-TextField-BackgroundColor |
聊天页面 | 输入区域 | 录音按钮 | 【plist】 MessageInputView-Record-TextColor MessageInputView-RecordView-BackgroundColor |
聊天页面 | 输入区域 | 更多区域 | 【plist】 MessageInputView-MorePanel-BackgroundColor MessageInputView-MorePanel-TextColor |
聊天页面 | 输入区域 | 更多区域Item | 参考exampleAddInputViewPluginToConversationController: |
聊天页面 | 输入区域 | 自定义表情 | 参考exampleShowCustomEmotionWithConversationController: |
聊天页面 | 自定义消息 | 自定义消息 | 参考exampleSendCustomMessageWithConversationController: exampleShowCustomMessageWithConversationController: |
聊天页面 | 消息显示 | 左中右文本颜色 | 【plist】 ConversationView-Message-Left-TextColor ConversationView-Message-Right-TextColor ConversationView-Message-Middle-TextColor |
聊天页面 | 消息显示 | 链接颜色 | 【plist】 ConversationView-Message-LinkColor ConversationView-Message-LinkColor-Left ConversationView-Message-LinkColor-Right |
聊天页面 | 消息显示 | 发送者昵称颜色 | 【plist】 ConversationView-SenderName-TextColor |
聊天页面 | 消息显示 | 时间分割线文字颜色 | 【plist】 ConversationView-TimeLine-TextColor |
聊天页面 | 气泡样式 | 气泡背景图等 | wxo_bubble_customize.plist,详见下文消息气泡 小节 |
注意:上表中的【plist】是指IM UI资源包中的OpenIM-Theme.plist
文件
注意:上表中列出的一些键值,如果在OpenIM-Theme.plist还不存在,您可以手动添加后查看运行效果。
注意:上表中列出的参考点,均可以在Demo工程中找到。
Demo/WXFrameworks/WXOUIModuleResources.bundle
注意:但是我们强烈地建议您不要直接修改此bundle,因为会导致您升级IMSDK时难以维护被修改的资源文件。推荐使用自定义皮肤包的方式。
注意:为了方便升级SDK,强烈建议使用自定义皮肤包,其中只包含你需要修改的资源文件,并且参考Demo中exampleCustomUISkin
方法设置自定义皮肤包。
/** * 自定义皮肤 */ - (void)exampleCustomUISkin { // 使用自定义UI资源和配置 YWIMKit *imkit = self.ywIMKit; NSString *bundleName = @"CustomizedUIResources.bundle"; NSString *bundlePath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:bundleName]; NSBundle *customizedUIResourcesBundle = [NSBundle bundleWithPath:bundlePath]; [imkit setCustomizedUIResources:customizedUIResourcesBundle]; }
注意:如上面的代码所示,CustomizedUIResources.bundle
即为你的自定义资源包,你可以在其中修改资源文件。
注意:注意在合适的时机调用该API,具体请参考官方Demo。
使用自定义皮肤包,当你需要升级IMSDK时,只需要直接覆盖Framework和默认资源Bundle即可。
您可以在资源包中找到OpenIM-Theme.plist
文件,修改某些选项即可定制对应的UI
注意:某些配置项并没有默认添加到OpenIM-Theme.plist中,如果您需要修改该项,请自己添加。
Global-TintColor
: 全局主题色TableView
影响除聊天窗口外的大部分其他TableView
TableView-SeparatorColor
: 分割线颜色TableView-BackgroundColor
: 背景色TableView-PullRefresh-TextColor
: 下拉刷新控件文字颜色TableView-PullRefresh-BackgroundColor
: 下拉刷新控件背景颜色TableViewCell
TableView-CellTitle
: 标题文字颜色TableView-CellMinor
: 附属信息文字颜色TableView-CellDetail
: 内容文字颜色TableView-CellBackgroundColor
: 背景色TableView-CellBackgroundColor_Highlighted
: 高亮背景色ConversationList-UnreadText
: 会话列表未读数文字颜色ConversationList-UnreadBackground
: 会话列表未读数背景色聊天背景
talk_bg.jpeg
: 聊天窗口背景图输入框
MessageInputView-BackgroundColor
: 输入区域背景色MessageInputView-MorePanel-TextColor
: 输入框更多面板选项名称文字颜色MessageInputView-MorePanel-BackgroundColor
: 输入框更多面板背景色MessageInputView-TextField-TextColor
: 输入框文字颜色MessageInputView-TextField-BackgroundColor
: 输入框背景色MessageInputView-Record-TextColor
: 录音按钮文字颜色MessageInputView-Tint-Color
: 输入区域主题色,如果没有该项,默认会使用全局主题色聊天消息
ConversationView-Message-Left-TextColor
: 左侧文本消息文字颜色ConversationView-Message-Right-TextColor
: 右侧文本消息文字颜色ConversationView-Message-Middle-TextColor
: 居中文本消息文字颜色ConversationView-Message-LinkColor
: 消息中链接文字颜色ConversationView-Message-LinkColor-Left
: 左侧消息中链接文字颜色,如果没有该项,则使用统一的消息链接文字颜色ConversationView-Message-LinkColor-Right
: 右侧消息中链接文字颜色,如果没有该项,则使用统一的消息链接文字颜色ConversationView-SenderName-TextColor
: 发送者昵称文字颜色
ConversationView-TimeLine-TextColor
: 时间分割线文字颜色ConversationView-TimeLine-BackgroundColor
: 时间分割线背景色您可以在Demo中尝试修改某些配置,并观察程序运行后的皮肤颜色变化。
目前的OpenIM UI SDK提供了消息气泡定制,你可以再资源包中找到wxo_bubble_customize.plist
文件。
打开wxo_bubble_customize.plist
文件中可看到如下层级结构:
BubbleStyle节点包含当前Demo中所有的消息气泡样式,您可以在YWBaseBubbleChatView.h
文件中看到具体的定义:
/// 文本、语音等普通气泡样式 CommonLeft // 左侧气泡样式 CommonMiddle // 居中气泡样式 CommonRight // 右侧气泡样式 /// 图片、地理位置等气泡中间镂空样式 HollowLeft // 左侧气泡样式 HollowMiddle // 居中气泡样式 HollowRight // 右侧气泡样式 /// 系统通知等弱提示消息样式 HintMiddle // 居中气泡样式
content : 配置气泡中内容区域的样式
color
: 内容区域的背景色corner_radius
: 对内容区域做圆角裁剪PS: 圆角裁剪主要用在内容在下层的样式,防止内容的四个边角漏出。
background : 配置气泡中背景区域的样式
image_name_normal
: 气泡背景图image_name_highlight
: 气泡高亮背景图color
: 背景区域颜色bringfrong
: 已失效,请忽略cap_insets : 背景图九宫拉伸参数,参数默认为
edge_insets
: 背景区域和内容区域间距
您可以在Demo中尝试修改某些配置,并观察程序运行后的皮肤颜色变化。
IMSDK提供的各个Controller都遵循YWViewControllerEventProtocol
协议,你可以在controller的viewDidLoadBlock
、viewWillAppearBlock
、viewDidAppearBlock
、viewWillDisappearBlock
、viewDidDisappearBlock
、viewControllerWillDeallocBlock
等block中,调用相关的系统API,以便控制状态栏、导航栏、Tabbar等。例如:
__weak typeof(conversationController) weakController = conversationController; [conversationController setViewWillAppearBlock:^(BOOL aAnimated) { [weakController.navigationController setNavigationBarHidden:NO animated:aAnimated]; }];
[conversationController setViewWillAppearBlock:^(BOOL aAnimated) { [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:aAnimated]; }];
YWConversationListViewController
的makeControllerWithIMKit:
函数来构造,然后在setViewDidLoadBlock:
中修改导航栏标题。如果使用YWIMKit
的makeConversationListViewController
方法构造,IMSDK默认会修改导航栏标题。YWConversationListViewController
的viewDidLoadBlock
中修改导航栏标题。YWConversationListViewController *controller = [YWConversationListViewController makeControllerWithIMKit:self.ywIMKit]; __weak typeof(controller) weakController = controller; [controller setViewDidLoadBlock:^{ [weakController.navigationItem setTitle:@"消息"]; }];
默认情况下聊天界面标题会显示在线状态和输入状态,如果您不需要,可以通过如下代码设置:
conversationController = [self.ywIMKit makeConversationViewControllerWithConversationId:aConversation.conversationId]; conversationController.disableTitleAutoConfig = YES; __weak typeof(controller) weakController = conversationController; [conversationController setViewDidLoadBlock:^{ [weakController.navigationItem setTitle:@"XXX"]; }];
当聊天页面预置的消息输入控件——YWMessageInputView 其定制能力不足以满足需求时,则可以使用完全自定义的输入控件,具体内容参考文档
《聊天页面消息输入控件完全自定义》