主题定制
提示
从 5.30.0 版本开始,IMKit 支持主题定制功能,提供传统主题和欢快主题两种内置主题,同时支持自定义主题。
功能概述
IMKit 的主题定制功能提供了灵活的主题配置能力,包括:
- 内置主题:传统主题(Traditional)和欢快主题(Lively)
- 自定义主题:支持基于内置主题进行颜色和图片的自定义
- 深色模式:iOS 13+ 自动适配系统深色模式
- 动态切换:运行时切换主题,无需重启应用
效果预览
| 传统主题-浅色 | 传统主题-深色 | 欢快主题-浅色 | 欢快主题-深色 |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
主题资源
在 RongIMKit.framework 组件文件夹下可以看到所支持的内置主题资源 RongCloudLively.bundle 和 RongCloud.bundle。RongCloudLively.bundle 为欢快主题资源包,RongCloud.bundle 为传统主题资源包。
选中 RongCloudLively.bundle并右键选择 Show Package Contents 即可看到内置的两套主题资源,文件夹名称即为主题类别。
我们以 “欢快主题” 为例,light 文件夹下包含 theme.plist 文件和 resources 资源文件夹。
theme.plist 文件存储了当前主题所使用的图片、颜色等要素的值,深色和浅色主题下的 theme.plist 文件中的 colors key 均相同;
resources 资源文件夹存储了当前主题所使用的资源,例如图片。
新增主题需要基于内置主题实现,用户需提供包含 theme.plist 文件和 resources 资源文件夹的 bundle,其中 theme.plist 的 key 按需添加,缺失的 key,SDK 会从内置主题浅色资源中获取对应资源替换。
快速开始
使用内置主题
IMKit SDK 默认使用传统主题,您可以通过以下方式切换主题:
objc
#import <RongIMKit/RongIMKit.h>
// 切换到传统主题
[RCIMKitThemeManager changeInnerTheme:RCIMKitInnerThemesTypeTradition];
// 切换到欢快主题
[RCIMKitThemeManager changeInnerTheme:RCIMKitInnerThemesTypeLively];
主题系统架构
核心类说明
RCIMKitThemeManager
主题管理器,负责主题的切换和资源获取。
主要方法:
| 方法 | 说明 |
|---|---|
changeInnerTheme: | 切换内置主题 |
changeCustomTheme:baseOnTheme: | 应用自定义主题 |
currentInnerThemesType | 获取当前内置主题类型 |
dynamicColor:lightColor:darkColor: | 获取动态颜色 |
dynamicImage:defaultImageName: | 获取动态图片 |
addThemeDelegate: | 添加主题变更监听 |
removeThemeDelegate: | 移除主题变更监听 |
RCIMKitTheme
自定义主题类,用于加载和管理自定义主题资源。
主要属性:
| 属性 | 类型 | 说明 |
|---|---|---|
name | NSString | 主题名称 |
colors | NSDictionary | 颜色配置字典 |
images | NSDictionary | 图片配置字典 |
resourcePath | NSString | 资源文件夹 路径 |
plistPath | NSString | 配置文件路径 |
RCIMKitInnerThemesType
内置主题类型枚举。
objc
typedef NS_ENUM(NSInteger, RCIMKitInnerThemesType) {
RCIMKitInnerThemesTypeTradition, // 传统主题
RCIMKitInnerThemesTypeLively // 欢快主题
};
主题切换
使用内置主题
IMKit 提供两种内置主题:传统主题(Traditional)和欢快主题(Lively)。
切换到传统主题
objc
#import <RongIMKit/RongIMKit.h>
// 切换到传统主题
[RCIMKitThemeManager changeInnerTheme:RCIMKitInnerThemesTypeTradition];
切换到欢快主题
objc
// 切换到欢快主题
[RCIMKitThemeManager changeInnerTheme:RCIMKitInnerThemesTypeLively];
获取当前主题
objc
// 获取当前内置主题类型
RCIMKitInnerThemesType currentType = [RCIMKitThemeManager currentInnerThemesType];
if (currentType == RCIMKitInnerThemesTypeTradition) {
NSLog(@"当前使用传统主题");
} else {
NSLog(@"当前使用欢快主题");
}



