Android(Compose)
组件概述
ChatSetting 是基于 Jetpack Compose 构建的聊天设置组件集合,主要包含单聊设置(
C2CChatSetting)和群聊设置(GroupChatSetting)两个核心组件。这些组件为用户提供了完整的聊天会话管理功能,包括用户信息管理、权限设置、群组管理等核心能力,并支持隐藏、替换和新增设置项。单聊设置界面 | 群聊设置界面 |
![]() | ![]() |
组件集成
ChatSetting 组件属于 TUIKit Compose 的一部分,集成 TUIKit Compose 即可获取并使用 ChatSetting 组件。集成方法请参考文档 TUIKit Compose 里的集成步骤。
组件构成
ChatSetting 包含两个主要组件:
C2CChatSetting(单聊设置)和 GroupChatSetting(群聊设置),每个组件都提供了丰富的配置选项。单聊设置(C2CChatSetting)
对外方法
方法名 | 参数 | 描述 |
C2CChatSetting | userID: String | 聊天对象的用户 ID。 |
| modifier: Modifier | Jetpack Compose 中用来设置组件的样式、布局、行为和外观。 |
| onSendMessageClick: () -> Unit | “发送消息”按钮点击回调,通常在这里跳转到与该用户的聊天页面。可选参数。 |
| onContactDeleted: () -> Unit | 删除好友成功后的回调,通常在这里关闭设置页面。点击“删除好友”时,组件会先弹出确认框,用户确认后才执行删除。可选参数。 |
| onVoiceCallClick: (() -> Unit)? | “语音通话”按钮点击回调,可选参数。为 null 时,组件会直接向该用户发起语音通话(需要集成 TUICallKit)。 |
| onVideoCallClick: (() -> Unit)? | “视频通话”按钮点击回调,可选参数。为 null 时,组件会直接向该用户发起视频通话(需要集成 TUICallKit)。 |
| config: C2CChatSettingConfigProtocol | 单聊设置配置,控制各设置项的显示,并支持编辑设置项。默认值为 C2CChatSettingConfig()。 |
| c2cChatSettingViewModelFactory: C2CChatSettingViewModelFactory | 创建组件内部 C2CChatSettingViewModel 的工厂类。通常情况下,您无需手动创建,组件已提供默认实现。 |
群聊设置(GroupChatSetting)
对外方法
方法名 | 参数 | 描述 |
GroupChatSetting | groupID: String | 群组 ID,用于标识群聊。 |
| modifier: Modifier | Jetpack Compose 中用来设置组件的样式、布局、行为和外观。 |
| onGroupMemberClick: (GroupMember) -> Unit | 群成员点击回调,通常在这里跳转到该成员的资料页。可选参数。 |
| onGroupDeleted: () -> Unit | 退出群聊或解散群聊成功后的回调,通常在这里关闭设置页面。可选参数。 |
| config: GroupChatSettingConfigProtocol | 群聊设置配置,控制各设置项的显示,并支持编辑设置项。默认值为 GroupChatSettingConfig()。 |
| groupChatSettingViewModelFactory: GroupChatSettingViewModelFactory | 创建组件内部 GroupChatSettingViewModel 的工厂类。通常情况下,您无需手动创建,组件已提供默认实现。 |
基础用法
初始化
C2CChatSetting 即可直接展示单聊设置页面,示例代码如下:import androidx.compose.foundation.layout.Boximport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.foundation.layout.systemBarsPaddingimport androidx.compose.runtime.Composableimport androidx.compose.ui.Modifierimport io.trtc.tuikit.chat.uikit.components.chatsetting.ui.C2CChatSetting@Composablefun C2CChatSettingScreen(userID: String,onOpenChat: (conversationID: String) -> Unit,onClose: () -> Unit) {Box(modifier = Modifier.fillMaxSize().systemBarsPadding()) {C2CChatSetting(userID = userID,onSendMessageClick = {// 点击“发送消息”,跳转到与该用户的聊天页面onOpenChat("c2c_$userID")},onContactDeleted = {// 删除好友成功,关闭当前页面onClose()})}}
初始化
GroupChatSetting 即可直接展示群聊设置页面,示例代码如下:import androidx.compose.foundation.layout.Boximport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.foundation.layout.systemBarsPaddingimport androidx.compose.runtime.Composableimport androidx.compose.ui.Modifierimport io.trtc.tuikit.chat.uikit.components.chatsetting.ui.GroupChatSetting@Composablefun GroupChatSettingScreen(groupID: String,onOpenUserProfile: (userID: String) -> Unit,onClose: () -> Unit) {Box(modifier = Modifier.fillMaxSize().systemBarsPadding()) {GroupChatSetting(groupID = groupID,onGroupMemberClick = { member ->// 点击群成员,跳转到该成员的资料页onOpenUserProfile(member.userID)},onGroupDeleted = {// 退出或解散群聊成功,关闭当前页面onClose()})}}
自定义组件
您可以隐藏、替换或新增设置项。方法如下。
隐藏设置项
通过
C2CChatSettingConfig 和 GroupChatSettingConfig 中的开关控制各设置项是否显示,所有开关的默认值均为 true。单聊设置的开关
开关 | 对应设置项 ID | 设置项 |
isShowHeader | ChatSettingItemIDs.C2C_HEADER | 顶部的用户资料(头像、昵称、用户 ID、个性签名) |
isShowRemark | ChatSettingItemIDs.C2C_REMARK | 备注名 |
isShowDoNotDisturb | ChatSettingItemIDs.C2C_DO_NOT_DISTURB | 消息免打扰 |
isShowPin | ChatSettingItemIDs.C2C_PIN | 置顶聊天 |
isShowChatBackground | ChatSettingItemIDs.C2C_CHAT_BACKGROUND | 聊天背景 |
isShowBlacklist | ChatSettingItemIDs.C2C_BLACKLIST | 加入黑名单 |
isShowSendMessage | ChatSettingItemIDs.C2C_SEND_MESSAGE | 发送消息 |
isShowVoiceCall | ChatSettingItemIDs.C2C_VOICE_CALL | 语音通话 |
isShowVideoCall | ChatSettingItemIDs.C2C_VIDEO_CALL | 视频通话 |
isShowClearHistory | ChatSettingItemIDs.C2C_CLEAR_HISTORY | 清空聊天记录 |
isShowDeleteFriend | ChatSettingItemIDs.C2C_DELETE_FRIEND | 删除好友 |
群聊设置的开关
开关 | 对应设置项 ID | 设置项 |
isShowHeader | ChatSettingItemIDs.GROUP_HEADER | 顶部的群资料(群头像、群名称、群 ID) |
isShowMemberPreview | ChatSettingItemIDs.GROUP_MEMBER_PREVIEW | 群成员预览 |
isShowNotice | ChatSettingItemIDs.GROUP_NOTICE | 群公告 |
isShowManagement | ChatSettingItemIDs.GROUP_MANAGEMENT | 管理群 |
isShowGroupType | ChatSettingItemIDs.GROUP_TYPE | 群类型 |
isShowJoinMethod | ChatSettingItemIDs.GROUP_JOIN_METHOD | 主动加群方式 |
isShowInviteMethod | ChatSettingItemIDs.GROUP_INVITE_METHOD | 邀请进群方式 |
isShowAlias | ChatSettingItemIDs.GROUP_ALIAS | 我的群名片 |
isShowDoNotDisturb | ChatSettingItemIDs.GROUP_DO_NOT_DISTURB | 消息免打扰 |
isShowPin | ChatSettingItemIDs.GROUP_PIN | 置顶聊天 |
isShowChatBackground | ChatSettingItemIDs.GROUP_CHAT_BACKGROUND | 聊天背景 |
isShowTransferOwner | ChatSettingItemIDs.GROUP_TRANSFER_OWNER | 转让群主 |
isShowClearHistory | ChatSettingItemIDs.GROUP_CLEAR_HISTORY | 清空聊天记录 |
isShowDeleteAndQuit | ChatSettingItemIDs.GROUP_DELETE_AND_QUIT | 退出群聊 |
isShowDismiss | ChatSettingItemIDs.GROUP_DISMISS | 解散该群聊 |
以下示例隐藏了单聊设置中的“加入黑名单”和音视频通话按钮,并通过 customActions 在底部操作按钮区域的末尾增加了一个“投诉”按钮:
import io.trtc.tuikit.chat.uikit.components.chatsetting.config.C2CChatSettingConfigimport io.trtc.tuikit.chat.uikit.components.chatsetting.ui.C2CChatSettingimport io.trtc.tuikit.chat.uikit.components.chatsetting.ui.SettingRowButtonimport io.trtc.tuikit.chat.uikit.components.chatsetting.ui.SettingRowButtonStyleC2CChatSetting(userID = userID,config = C2CChatSettingConfig(isShowBlacklist = false, // 隐藏“加入黑名单”isShowVoiceCall = false, // 隐藏“语音通话”isShowVideoCall = false // 隐藏“视频通话”),customActions = {// 显示在底部操作按钮区域的末尾SettingRowButton(title = "投诉",style = SettingRowButtonStyle.DANGER,onClick = {// 跳转到投诉页面})})
编辑设置项
如需替换、移动或新增设置项,可以通过
C2CChatSettingConfig 或 GroupChatSettingConfig 的 customizeItems 编辑设置项。在 customizeItems 中,可以通过 editorContext.userID(单聊)或 editorContext.groupID(群聊)获取当前聊天对象,通过 editorContext.androidContext 获取 Android Context,并调用以下方法编辑设置项:方法 | 描述 |
add(item) | 在末尾添加设置项。item 的 ID 为空白或与已有设置项重复时会抛出 IllegalArgumentException。 |
remove(ID) | 移除指定 ID 的设置项,不存在时返回 false。 |
replace(ID) { item -> ... } | 替换指定 ID 的设置项,不存在时返回 false。替换后的设置项必须保持 ID 不变,否则会抛出异常。 |
insertBefore(anchorID, item) / insertAfter(anchorID, item) | 在锚点设置项之前或之后插入设置项。锚点不存在时返回 false,且不会插入。item 的 ID 规则与 add 相同。 |
moveBefore(ID, anchorID) / moveAfter(ID, anchorID) | 将设置项移动到锚点设置项之前或之后,任意一个 ID 不存在时返回 false。 |
clear() | 移除全部设置项。 |
items | 当前设置项列表的只读快照。 |
设置项
ChatSettingCustomItem 的字段说明如下:字段 | 类型 | 描述 |
ID | String | 设置项的唯一标识,必填。 |
sectionID | String? | 设置项所属的分组 ID,默认为 null,不能为空白字符串。 |
contentFactory | @Composable (C) -> Unit | 设置项的内容,参数为 editorContext,单聊为 C2CChatSettingItemContext,群聊为 GroupChatSettingItemContext。 |
相邻且 sectionID 相同的设置项会显示在同一个分组中,分组内的设置项之间有分隔线,分组之间有间隔;sectionID 为 null 的设置项单独显示。默认的分组 ID 定义在
ChatSettingSectionIDs 中:分组 ID | 包含的默认设置项 |
ChatSettingSectionIDs.C2C_REMARK | 备注名 |
ChatSettingSectionIDs.C2C_SWITCHES | 消息免打扰、置顶聊天 |
ChatSettingSectionIDs.C2C_CHAT_BACKGROUND | 聊天背景 |
ChatSettingSectionIDs.C2C_BLACKLIST | 加入黑名单 |
ChatSettingSectionIDs.C2C_ACTIONS | 发送消息、语音通话、视频通话、清空聊天记录、删除好友,以及 customActions |
ChatSettingSectionIDs.GROUP_SETTINGS | 群公告、管理群、群类型、主动加群方式、邀请进群方式 |
ChatSettingSectionIDs.GROUP_ALIAS | 我的群名片 |
ChatSettingSectionIDs.GROUP_SWITCHES | 消息免打扰、置顶聊天 |
ChatSettingSectionIDs.GROUP_CHAT_BACKGROUND | 聊天背景 |
ChatSettingSectionIDs.GROUP_ACTIONS | 转让群主、清空聊天记录、退出群聊、解散该群聊 |
顶部资料(C2C_HEADER、GROUP_HEADER)和群成员预览(GROUP_MEMBER_PREVIEW)的 sectionID 为 null。
自定义设置项的内容可以使用组件提供的以下组件,与默认设置项保持一致的样式:
组件 | 描述 |
SettingRowNavigate(title, value, showArrow, customAccessoryResId, onClick) | 左侧为标题、右侧为文字和箭头的设置行。onClick 为 null 时不可点击。 |
SettingRowToggle(title, checked, onCheckedChange) | 带开关的设置行。 |
SettingRowButton(title, style, onClick) | 文字居中的按钮行,style 支持 NORMAL(默认)、LINK(链接色)和 DANGER(警示色)。 |
以下示例隐藏了群聊设置中的“群类型”,在“置顶聊天”之后新增了一个开关,并在“聊天背景”之后新增了一个独立的分组:
import androidx.compose.runtime.getValueimport androidx.compose.runtime.mutableStateOfimport androidx.compose.runtime.rememberimport androidx.compose.runtime.setValueimport io.trtc.tuikit.chat.uikit.components.chatsetting.config.GroupChatSettingConfigimport io.trtc.tuikit.chat.uikit.components.chatsetting.model.ChatSettingCustomItemimport io.trtc.tuikit.chat.uikit.components.chatsetting.model.ChatSettingItemIDsimport io.trtc.tuikit.chat.uikit.components.chatsetting.model.ChatSettingSectionIDsimport io.trtc.tuikit.chat.uikit.components.chatsetting.ui.GroupChatSettingimport io.trtc.tuikit.chat.uikit.components.chatsetting.ui.SettingRowNavigateimport io.trtc.tuikit.chat.uikit.components.chatsetting.ui.SettingRowToggleval groupSettingConfig = GroupChatSettingConfig(isShowGroupType = false // 隐藏“群类型”).customizeItems {// 加入“消息免打扰”“置顶聊天”所在的分组,放在“置顶聊天”之后insertAfter(ChatSettingItemIDs.GROUP_PIN,ChatSettingCustomItem(ID = "custom.group.showMemberNickname",sectionID = ChatSettingSectionIDs.GROUP_SWITCHES) {// 示例中的开关状态仅保存在内存,实际使用时请与业务数据绑定var checked by remember { mutableStateOf(true) }SettingRowToggle(title = "显示群成员昵称",checked = checked,onCheckedChange = { checked = it })})// 在“聊天背景”之后新增一个独立的分组insertAfter(ChatSettingItemIDs.GROUP_CHAT_BACKGROUND,ChatSettingCustomItem(ID = "custom.group.files",sectionID = "custom.section.groupFiles") { itemContext ->SettingRowNavigate(title = "群文件",onClick = {// 跳转到群文件页面,itemContext.groupID 为当前群 ID})})}GroupChatSetting(groupID = groupID,config = groupSettingConfig)
注意:
群聊设置中的“管理群”“消息免打扰”“置顶聊天”“转让群主”“清空聊天记录”“退出群聊”“解散该群聊”会根据群类型和当前用户的群角色自动隐藏,例如非群主看不到“转让群主”和“解散该群聊”。通过 replace 替换后的设置项只要 ID 不变,仍然受权限控制;新增的设置项不受权限控制,请自行判断是否展示。
插入设置项时,如果锚点设置项已通过开关隐藏,insertBefore / insertAfter 会返回 false 且不会插入。


