主题定制
提示
从 5.30.0 版本开始,IMKit 支持主题定制功能,提供传统主题和欢快主题两种内置主题,同时支持自定义主题。
功能概述
IMKit 的主题定制功能提供了灵活的主题配置能力,包括:
- 内置主题:传统主题(Traditional)和欢快主题(Lively)
- 自定义主题:支持基于内置主题进行颜色和图片的自定义
- 深色模式:Android 10+ 自动适配系统深色模式
- 动态切换:运行时无缝切换主题,无需重启应用
效果预览
| 传统主题-浅色 | 欢快主题-浅色 | 欢快主题-深色 |
|---|---|---|
![]() | ![]() | ![]() |
主题资源
IMKit SDK 组件包含所支持的内置主题资源。传统主题资源位于 res 文件夹下,欢快主题资源位于 res-lively 相关文件夹下。
欢快主题包含浅色和深色两套资源,分别位于 res-lively-light 和 res-lively-dark 文件夹下。
每个主题文件夹包含 values 配置文件和 drawable 资源文件夹。
values 文件夹存储了当前主题所使用的颜色、样式等配置;
drawable 资源文件夹存储了当前主题所使用的图片资源。
新增主题需要基于内置主题实现,用户需提供包含样式配置文件和资源文件夹的资源包,其中样式配置按需添加,缺失的配置,SDK 会从内置主题浅色资源中获取对应资源替换。
快速开始
使用内置主题
IMKit SDK 默认使用传统主题,您可以通过以下方式切换主题:
Java
import io.rong.imkit.config.IMKitThemeManager;
// 切换到传统主题
IMKitThemeManager.changeInnerTheme(context, IMKitThemeManager.TRADITION_THEME);
// 切换到欢快主题
IMKitThemeManager.changeInnerTheme(context, IMKitThemeManager.LIVELY_THEME);
主题系统架构
核心类说明
IMKitThemeManager
主题管理器,负责主题的切换和资源获取。
主要方法:
| 方法 | 说明 |
|---|---|
changeInnerTheme(Context, String) | 切换内置主题 |
changeCustomTheme(Context, String, String) | 应用自定义主题 |
getCurrentThemeName() | 获取当前主题名称 |
getAttrResId(Context, int) | 获取主题属性资源ID |
addTheme(String, int, int) | 添加自定义主题 |
addThemeListener(OnThemeListener) | 添加主题变更监听 |
removeThemeListener(OnThemeListener) | 移除主题变更监听 |
主题常量
内置主题类型常量。
Java
public class IMKitThemeManager {
public static final String TRADITION_THEME = "TRADITION_THEME"; // 传统主题
public static final String LIVELY_THEME = "LIVELY_THEME"; // 欢快主题
}
主题切换
应用内置主题
IMKit 提供两种内置主题:传统主题(Traditional)和欢快主题(Lively)。
切换到传统主题
Java
import io.rong.imkit.config.IMKitThemeManager;
// 切换到传统主题
IMKitThemeManager.changeInnerTheme(context, IMKitThemeManager.TRADITION_THEME);
切换到欢快主题
Java
// 切换到欢快主题
IMKitThemeManager.changeInnerTheme(context, IMKitThemeManager.LIVELY_THEME);
获取当前主题
Java
// 获取当前主题名称
String currentTheme = IMKitThemeManager.getCurrentThemeName();
if (IMKitThemeManager.TRADITION_THEME.equals(currentTheme)) {
Log.d("Theme", "当前使用传统主题");
} else if (IMKitThemeManager.LIVELY_THEME.equals(currentTheme)) {
Log.d("Theme", "当前使用欢快主题");
}
深色模式支持
IMKit 会自动适配 Android 10+ 的系统深色模式,无需额外配置。
兼容性说明
- Android 10+:完整支持深色模式
- Android 10 以下:仅支持浅色模式
自定义主题
创建自定义主题
步骤 1:准备主题资源
创建主题资源文件夹,包含配置文件和资源文件:
text
app/src/main/
├── res-custom-ocean/ # 通用资源(可选)
│ ├── drawable/
│ └── drawable-xxhdpi/
├── res-custom-ocean-light/ # 浅色主题资源
│ ├── values/
│ │ ├── ocean_colors.xml
│ │ └── ocean_style.xml
│ └── drawable/
└── res-custom-ocean-dark/ # 深色主题资源
├── values/
│ ├── ocean_dark_colors.xml
│ └── ocean_dark_style.xml
└── drawable/
步骤 2:配置 Gradle
在 build.gradle 中添加资源文件夹:
gradle
android {
sourceSets {
main {
res.srcDirs = [
'src/main/res',
'src/main/res-custom-ocean',
'src/main/res-custom-ocean-light',
'src/main/res-custom-ocean-dark'
]
}
}
}
步骤 3:定义颜色资源
res-custom-ocean-light/values/ocean_colors.xml
xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 主色 -->
<color name="rc_primary_color_ocean_light">#0077BE</color>
<!-- 文字色 -->
<color name="rc_text_primary_color_ocean_light">#1A1A1A</color>
<color name="rc_text_secondary_color_ocean_light">#6B7280</color>
<!-- 功能色 -->
<color name="rc_success_color_ocean_light">#10B981</color>
<color name="rc_hint_color_ocean_light">#EF4444</color>
<color name="rc_disabled_color_ocean_light">#D1D5DB</color>
<!-- 背景色 -->
<color name="rc_common_background_color_ocean_light">#F0F9FF</color>
<color name="rc_auxiliary_background_1_color_ocean_light">#E0F2FE</color>
<color name="rc_line_background_color_ocean_light">#E5E7EB</color>
</resources>


