Skip to main content
Version: Next

Темы оформления

Применение тем

В классе ChatCenterUI до вызова метода init(...) задайте стили, изменив поля theme или darkTheme. Данные параметры опциональны. В SDK уже заданы параметры по-умолчанию для светлой темы, если вы не определите свои. В случае, если не определена темная тема, внутри SDK всегда будет использоваться светлая тема.

Пример:

chatCenterUI = ChatCenterUI(applicationContext).apply {
theme = chatLightTheme
darkTheme = chatDarkTheme
init(server.threadsGateProviderUid, server.appMarker, chatConfig)
}

Тема состоит из двух уровней. Первый уровень - это компоненты (ChatComponents), второй флоу (ChatFlows). Компоненты представляют собой набор общих стилей для отдельных view. К примеру, ниже представлен фрагмент кода для "кнопок-иконок" внутри SDK:

class IconButtonComponent(
internal val context: Context,
colors: ChatColors,
images: ChatImages
) {
/**
* Иконка для кнопки "назад"
*/
@DrawableRes
var backBtnImage = images.backBtn

//...

/**
* Цвет кнопки "назад"
*/
@ColorRes
var backButtonColor = colors.backButton

/**
* Цвет кнопки "назад"
*/
@ColorRes
var chatToolbarInverseIconTintColor = colors.chatToolbarInverseIconTint

//...

/**
* Цвет иконки очистки цитаты
*/
@ColorRes
var quoteClearIconColor = colors.quoteClearIcon

}

Поля данного класса будут применены ко всем подобным кнопкам в приложении. Вы можете переопределить в SDK какие-то компоненты целиком, либо переопределить точечно конкрутную кнопку через ChatFlows.

Компонент чата можно переопределить как целиком, так и его часть:

val lightChatComponents = ChatComponents(
applicationContext,
colors = lightColors,
images = lightImages
).apply {
navigationBarStyle = navigationBarStyle.copy(closeButtonEnabled = false)
}

Цвета и картинки, указанные выше при создании компонентов - опциональны. Можно задать свои, переопределив только те, которые считаете нужным:

val lightColors = ChatColors(
main = R.color.light_main,
searchingProgressLoader = R.color.light_main,
bodyIconsTint = R.color.light_main,
incomingText = R.color.black_color,
incomingTimeText = R.color.light_time_text,
outgoingTimeText = R.color.light_time_text,
outgoingText = R.color.black_color,
incomingBubble = R.color.alt_white,
outgoingBubble = R.color.light_outgoing_bubble,
toolbarText = R.color.white_color,
messageSendingStatus = R.color.light_icons,
messageSentStatus = R.color.light_icons,
messageDeliveredStatus = R.color.light_icons,
messageReadStatus = R.color.light_icons,
messageFailedStatus = R.color.light_icons,
incomingLink = R.color.light_links,
outgoingLink = R.color.light_links,
toolbar = R.color.light_main,
statusBar = R.color.light_statusbar,
menuItem = R.color.light_main
)

При переопределении компонента выше для светлой темы мы меняем кнопку назад для всех экранов: чат, просмотр изображений и т.д. Однако если вы переопределите эту кнопку внутри ChatFlows, это будет иметь более высокий приоритет перед компонентом.

В дальнейшем вы создаете тему:

chatLightTheme = ChatTheme(lightChatComponents)

и при инициализации SDK устанавливаете ее:

chatCenterUI = ChatCenterUI(applicationContext, loggerConfig).apply {
theme = chatLightTheme
darkTheme = chatDarkTheme
init(server.threadsGateProviderUid ?: "", server.appMarker ?: "", chatConf)
}

Внутри ChatFlows представлены все элементы, которые отображены в SDK. Если вам, к примеру, нужно точечно переопределить только кнопку "назад", вы можете сделать это следующий образом:

val flows = ChatFlows(ChatComponents(applicationContext)).apply {
// меняем кнопку "назад"
chatFlow.navigationBar.backButton = IconButtonChatStyle(
IconButtonColorStyle(
iconTintColor = R.color.blue_color
),
R.drawable.ic_cloud
)
// центрируем текст в тулбаре
chatFlow.navigationBar.centerToolbarText = true
}
chatLightTheme = ChatTheme(flows) // создайте инстанс темы, переопределив точечно нужные элементы
note

При определении flow, как в случае с backButton выше, необходимо вызвать метод copy() на уже существующем flow (data класс) и переопределить значение при копировании, либо создать новый flow. Обращение к полю напрямую может не дать нужного эффекта

То есть при создании тем вы можете определять как компоненты, которые на более низком уровне будут задавать стили для view, так и переопределить конкретные view с помощью ChatFlows.

Или, к примеру, если вам нужно переопределить подсказку при поиске в поле ввода:

val flows = ChatFlows(ChatComponents(applicationContext)).apply {
// ... Иные настройки flows, если необходимо
searchFlow.searchBar.textInput?.placeholderText = "Поиск в сообщениях"
}

Пример переопределения внутри компонента цвета текста для всех полей ввода:

ChatTheme(
lightChatComponents.apply {
inputTextComponent.inputMessageColor = R.color.alt_blue
}
)

Подробнее можно посмотреть в нашем демо и в специальном разделе, описывающем все методы публичного апи.

Ресурсы

Описание используемых ресурсов можно почитать в данном разделе

Инфографика

Данный раздел в изображениях описывает элементы чата и их кастомизацию через флоу и компоненты тем.

Основные элементы чата

Основные элементы чата

1.1. Заголовок в тулбареchatFlownavigationBartoolbarHeaderText
Компонент: NavigationBarStyle

1.2. Подзаголовок в тулбареchatFlownavigationBartoolbarSubtitleText
Компонент: NavigationBarStyle

1.3. Заголовок с форматированием (Spannable)chatFlownavigationBartoolbarSpannableHeaderText Компонент: NavigationBarStyle

1.4. Иконка поискаsearchFlowsearchBarsearchIcon Компонент: SearchChatComponent

1.5. Фоновый цвет панели навигацииchatFlownavigationBar Параметр: backgroundColor Компонент: NavigationBarStyle

1.6. Цвет статус бараchatFlownavigationBar Параметр: statusBarColor
Компонент: NavigationBarStyle

1.7. Отображение тени под тулбаромchatFlownavigationBar Параметр: visibleShadow
Компонент: NavigationBarStyle

1.8. Центрирование текста в тулбареchatFlownavigationBar Параметр: centerToolbarText
Компонент: NavigationBarStyle

1.9. Активность кнопки "Назад"chatFlownavigationBar Параметр: closeButtonEnabled
Компонент: NavigationBarStyle

1.10. Видимость подзаголовка в тулбареchatFlownavigationBar Параметр: chatSubtitleEnabled
Компонент: NavigationBarStyle

1.11. Стиль кнопки "Назад"chatFlownavigationBarbackButton
Компонент: NavigationBarStyle

1.12. Стиль кнопки поискаchatFlownavigationBarsearchButton
Компонент: NavigationBarStyle

2.1. Изображение в сообщенииchatFlowimage Компонент: ImageComponent

2.2. Баббл чата (общий стиль)chatFlowchatBubble
Компонент: BubbleComponent

2.3. Иконки статусов сообщенийchatFlowstatusIcons
Компонент: MessageStatusesComponent

3. Текст для временной метки в сообщении с изображениемchatFlowimagesTimeText
Компонент: TextComponent

4. Описание стиля системных сообщенийsystemMessagessystemMessageText
Компоненты: TextComponent, ImageComponent

5. Стиль исходящих сообщенийoutcomeMessages

6. Аватар оператора в чатеimageFlow
Компонент: ImageComponent

7. Стиль входящих сообщенийincomeMessages
Задействованы все компоненты

8. Кнопка прикрепления вложенияchatFlowinputViewattachButton
Компонент: iconButtonComponent

9. Поле ввода сообщенияchatFlowinputView
Компоненты: iconButtonComponent, inputTextComponent

10.1. Запись сообщенияchatFlowinputViewvoiceButton
Компонент: iconButtonComponent

10.2. Отправка сообщенияchatFlowinputViewsendButton
Компонент: iconButtonComponent

Поведение при выделении сообщения

Поведение при выделении сообщения

1. Стиль кнопки "Копировать"chatFlownavigationBarcopyButton
Компонент: NavigationBarStyle

2. Стиль кнопки "Ответить с цитированием"chatFlownavigationBarreplyButton
Компонент: NavigationBarStyle

3. Инвертированная кнопка "Назад"chatFlownavigationBarinvertedBackButton
Компонент: NavigationBarStyle

4. Цвет фона под выделенным сообщениемchatFlowhighlightingColor

Поле поиска сообщений

Поле поиска со�общений

1. Стиль кнопки поискаchatFlownavigationBarsearchButton
Компонент: SearchChatComponent

2. Цвет лоадера при поискеsearchFlowsearchLoaderColor
Компонент: SearchChatComponent

3. Стиль поля вводаsearchFlowtextInput
Компонент: SearchChatComponent

Список найденный сообщений

Поле поиска сообщений

1. Стиль кнопки очистки поля вводаsearchFlowclearSearch
Компонент: SearchChatComponent

2.1. Цвет текста с автором сообщенияsearchFlowsearchResultsStylesearchResultsItemNameTextColor
Компонент: SearchChatComponent

2.2. Цвет текста с сообщениемsearchFlowsearchResultsStylesearchResultsItemMessageTextColor
Компонент: SearchChatComponent

2.3. Цвет текста датыsearchFlowsearchResultsStylesearchResultsItemDateTextColor
Компонент: SearchChatComponent

2.4. Цвет разделителя между результатамиsearchFlowsearchResultsStylesearchResultsDividerColor
Компонент: SearchChatComponent

2.5. Иконка "стрелка вправо"searchFlowsearchResultsStylesearchResultsItemRightArrowDrawable
Компонент: SearchChatComponent

2.6. Цвет иконки "стрелка вправо"searchFlowsearchResultsStylesearchResultsItemRightArrowTintColor
Компонент: SearchChatComponent

2.7. Изображение при отсутствии результатовsearchFlowsearchResultsStylesearchResultsNoItemsImageDrawable
Компонент: SearchChatComponent

2.8. Текст при отсутствии результатовsearchFlowsearchResultsStylesearchResultsNoItemsText
Компонент: SearchChatComponent

2.9. Цвет текста при отсутствии результатовsearchFlowsearchResultsStylesearchResultsNoItemsTextColor
Компонент: SearchChatComponent

2.10. Цвет фона в результатах поискаsearchFlowsearchResultsStylebackgroundColor
Компонент: SearchChatComponent

Всплывающее сообщение

Всплывающее сообщени�е

Стиль для всплывающих сообщенийballoonsChatStyle
Стилизуется только в случае, если система может выбрать Snackbar, привязавшись ко вью

Компактный пуш

Компактный пуш

Стиль компактного push-уведомленияsmallPushes
Компонент: PushesComponent

Развернутый пуш

Развернутый пуш

Стиль расширенного push-уведомленияbigPushes
Компонент: PushesComponent

Быстрый ответ на пуш-уведомление

Быстрый ответ на пуш-уведомление

1. Стиль для тулбараchatFlownavigationBarStyle
Компонент: NavigationBarStyle

2. Фоновый цветchatFlowbackgroundColor
Компонент: ImageComponent

3. Цвет фона за полем вводаchatFlowanswerLayoutBackgroundColor
Компонент: InputTextComponent

4. Иконка для ответа на сообщение с цитированиемchatFlowreplyIcon
Компонент: IconButtonComponent

5. Цвет иконокchatFlowiconColor
Компонент: ImageComponent

6. Стиль кнопки отправки сообщенияchatFlowsendButton
Компонент: IconButtonComponent

7. Стиль текста с именем оператораchatFlowconsultNameText
Компонент: TextComponent

8. Стиль текста с вопросомchatFlowquestionText
Компонент: TextComponent

9. Стиль поля ввода для быстрых ответовchatFlowfastTextInput
Компонент: InputTextComponent

Запрос на завершение диалога

Запрос на завершение диалога

1. ТекстchatFlowsystemMessagesapproveRequest
Компонент: TextComponent

2. Кнопка с положительным ответомchatFlowsystemMessagesdenyRequest
Компонент: TextComponent

3. Кнопка с отрицательным ответомchatFlowsystemMessagesrequestToResolve
Компонент: TextComponent

Отзыв о работе оператора (звезды)

Отзыв о работе оператора

1. Текст при просьбе проставить оценкуchatFlowsystemMessagesratingStyleaskForRateText
Компонент: TextComponent

2. Текст благодарности за проставленную оценкуchatFlowsystemMessagesratingStylethanksForRateText Компонент: TextComponent

3. Вид пустой звездыchatFlowsurveyStyleoptionsSurveyUnselected
Компонент: ImageComponent

4. Вид заполненной звездыchatFlowsurveyStyleoptionsSurveySelected
Компонент: ImageComponent

Опрос при завершении диалога (пальцы)

Быстрые ответы в чате

Стиль для рейтингаchatFlowsystemMessagesratingStyle
Компонент: RatingComponent

Опрос с кнопками

Опрос с кнопками

1. Стиль для кнопки опросаchatFlowbuttonSurveyButton
Компонент: IconButtonChatStyle

2. Стиль текста для вопроса в опросахchatFlowbuttonSurveyQuestion
Компонент: TextComponent

Быстрые ответы в чате

Быстрые ответы в чате

Стиль текста для кнопки быстрых ответовchatFlowchip
Компонент: TextComponent

Предпросмотр отправляемого файла

Предпросмотр отправляемого файла

1. Стиль текста с заголовком цитатыQuoteViewStylequoteHeaderChatViewText
Компонент: TextComponent

2. Стиль текста с сообщением цитатыQuoteViewStylequoteMessageChatViewText
Компонент: TextComponent

3. Стиль кнопки "очистить" в цитатеQuoteViewStylequoteClearIconButton
Компонент: IconButtonChatStyle

Предпросмотр голосового файла

Предпросмотр голосового файла

1. Стиль кнопки воспроизведения/паузыchatFlowquotePlayPauseButton
Компонент: IconButtonChatStyle

2. Стиль текста с продолжительностью голосового сообщенияchatFlowquoteViewStylequoteDurationChatViewText
Компонент: TextComponent

Сообщения с файлом

Сообщения с файлом
Сообщения с файлом
Сообщения с файлом

chatFlowoutcomeMessages /incomeMessages → см. описание полей ниже:

1. Фоновый цвет элемента с файломFileMessageStylebackgroundColor
Компонент: ImageComponent

2. Внутренние отступы для элемента - padding
Компонент: ImageComponent

3. Стиль для лоадера - loader
Компонент: LoaderChatStyle

4. Стиль для имени файла - fileName
Компонент: TextComponent

5. Стиль для характеристик файла - fileSpecs
Компонент: TextComponent

Сообщение с ошибкой при отправке

Сообщение с ошибкой при отправке

1. Текст ошибки загрузки файла - chatFlowoutcomeMessages /incomeMessagesfileMessageStyleerror

2. Стиль сообщений с ошибкамиchatFlowerrorMessageschatBubble
Компонент: BubbleComponent

Заглушка для изображения

Заглушка для изображения

Ресурс заглушки для недоступного изображенияimageFlowimagePlaceholderResId
Компонент: ImageComponent

Прогресс-бар при старте чата

Прогресс-бар при старте чата

Прогресс-бар при старте чатаchatFlowloader
Компонент: LoadingIndicatorComponent

Экран с ошибкой

Экран с ошибкой

1. Кнопка повторной инициализации чатаchatFlowretryChatInitButton
Компонент: TextButtonComponent

2. Сообщение на экране ошибки чатаchatFlowerrorScreenMessage
Компонент: TextComponent

3. Изображение на экране ошибки чатаchatFlowerrorScreenImage
Компонент: ImageComponent

Экран-приветствие

Экран-приветствие

1. Стиль заголовка приветствияchatFlowwelcomeScreenStylewelcomeScreenTitle
Компонент: TextComponent

2. Стиль подзаголовка приветствияchatFlowwelcomeScreenStylewelcomeScreenSubtitle
Компонент: TextComponent

3. Стиль изображения приветствияchatFlowwelcomeScreenStylewelcomeScreenImage
Компонент: ImagesChatStyle

4. Фоновый цвет экрана приветствияchatFlowwelcomeScreenStylebackgroundColor
Компонент: ChatMainComponent

Кнопка скролла вниз по сообщениям

Кнопка скролла вниз по сообщениям

1. Стиль кнопки скроллаchatFlowoutcomeMessages / incomeMessagesscrollDownButton
Компонент: ImageComponent

2. Цвет стикера непрочитанных сообщенийchatFlowoutcomeMessages / incomeMessagesunreadMsgStickerColor
Компонент: ChatMainComponent

3. Текст на стикере непрочитанных сообщенийchatFlowoutcomeMessages / incomeMessagesunreadMessagesCount
Компонент: TextComponent

Кнопка скролла вверх по сообщениям

Кнопка скролла вверх по сообщениям

1. Стиль кнопки скроллаchatFlowoutcomeMessages / incomeMessagesscrollUpButton
Компонент: ImageComponent

2. Цвет стикера непрочитанных сообщенийchatFlowoutcomeMessages / incomeMessagesunreadMsgStickerUpColor
Компонент: ChatMainComponent

3. Текст на стикере непрочитанных сообщенийchatFlowoutcomeMessages / incomeMessagesunreadMessagesCountUp
Компонент: TextComponent

Справочник параметров ChatColors

Ниже перечислены все доступные поля ChatColors. Значения задаются ссылками на ресурсы цветов (R.color.*).

ПолеОписаниеЗначение по умолчанию
backButtonцвет кнопки "назад"R.color.ecc_white
mainосновной цвет чата. Используется в элементах тулбара, лоадерах и т.д, где не задан собственный цветR.color.ecc_green_83b144
searchingProgressLoaderцвет для лоадера при поиске оператораR.color.ecc_consult_searching_progress_color
bodyIconsTintцвет иконок, если не задан собственный цветmain
toolbarцвет тулбараR.color.ecc_chat_toolbar
toolbarContextMenuцвет иконки "три точки", вызывающей меню в тулбареR.color.ecc_chat_toolbar_context_menu
statusBarцвет статус бараR.color.ecc_chat_status_bar
menuItemцвет текста в элементе менюR.color.ecc_chat_toolbar_menu_item
toolbarTextцвет текста в тулбареR.color.ecc_white
incomingTextцвет текста во входящих сообщенияхR.color.ecc_black
outgoingTextцвет текста в исходящих сообщенияхR.color.ecc_white
incomingLinkцвет текста во входящих ссылкахR.color.ecc_incoming_message_link
outgoingLinkцвет текста в исходящих ссылкахR.color.ecc_outgoing_message_link
disabledColorцвет для отключенных элементовR.color.ecc_disabled_text_color
incomingBubbleцвет входящего бабблаR.color.ecc_white
outgoingBubbleцвет исходящего бабблаmain
chatToolbarInverseIconTintцвет иконок в тулбаре, если цвет тулбара был инвертирован (при выборе сообщения, например)R.color.ecc_white
systemMessageцвет системных сообщенийR.color.ecc_chat_system_message
errorTextцвет текста с ошибкамиR.color.ecc_error_red_df0000
mainTextWhenErrorBubbleсм. название поля: main Text When Error BubbleR.color.ecc_white
errorBackgroundцвет баббла, если произошла ошибка в сообщении (например, не сработала отправка)R.color.ecc_error_red_df0000
errorIconсм. название поля: error IconR.color.ecc_white
gallerySearchTitleцвет текста для заголовка при поиске на экране галереиR.color.ecc_white
gallerySearchSubtitleцвет текста для подзаголовка при поиске на экране галереиR.color.ecc_gallery_search_subtitle
galleryImageBottomNameцвет для названия файла под изображениемR.color.ecc_white
mediaAndFilesTextцвет текста в разделе "Файлы и медиа" для заголовка, размера файла и его времениR.color.ecc_black
quickRepliesTextцвет текста в быстрых ответахR.color.ecc_black
quickReplyButtonBackgroundTintсм. название поля: quick Reply Button Background TintR.color.ecc_white
incomingTimeTextцвет текста для времени во входящих сообщенияхincomingText
outgoingTimeTextцвет текста для времени в исходящих сообщенияхoutgoingText
incomingImageTimeBackgroundцвет подложки под временем во входящих сообщенияхR.color.ecc_incoming_time_background
outgoingImageTimeBackgroundцвет подложки под временем в исходящих сообщенияхR.color.ecc_outgoing_time_background
surveyTextцвет текста для опросовR.color.ecc_chat_system_message
buttonSurveyTextButtonColorсм. название поля: button Survey Text Button ColorR.color.ecc_white
surveyButtonBackgroundTintColorсм. название поля: survey Button Background Tint Colormain
buttonSurveyQuestionTextColorсм. название поля: button Survey Question Text ColorR.color.ecc_chat_system_message
surveyChoicesTextцвет текста для выбора варианта ответа при опросеR.color.ecc_survey_choices_text
rateStarsCountцвет текста для количества выставленных звездR.color.ecc_chat_outgoing_message_bubble
rateTotalStarsCountцвет текста для доступных звезд к выборуoutgoingText
rateFromцвет текста для предлога "из" (3 из 5)outgoingText
rateStarцвет иконки звездыoutgoingText
scheduleTextцвет текста для расписанияR.color.ecc_schedule_text
unreadMessagesCountTextцвет текста для количества непрочитанных сообщенийR.color.ecc_chat_unread_msg_count_text
quoteHeaderChatViewцвет текста для заголовка при цитированииR.color.ecc_black
quoteTextцвет текста при цитированииR.color.ecc_black
quoteClearIconсм. название поля: quote Clear Iconmain
welcomeScreenTitleTextцвет текста для заголовка на приветственном экранеR.color.ecc_welcome_screen_title
welcomeScreenSubtitleTextцвет текста для подзаголовка на приветственном экранеR.color.ecc_welcome_screen_subtitle
inputMessageцвет текста для полей ввода, кроме поискаR.color.ecc_black
inputMessageHintцвет текста для подсказки в полях ввода, кроме поискаR.color.ecc_grey_aaa
inputFieldBackgroundцвет фона для поля вводаR.color.ecc_white
searchTextцвет текста для поля поискаR.color.ecc_white
searchHintцвет текста для подсказки в поле поискаR.color.ecc_cian_b2dfdb
chatBackgroundфоновый цвет для окна чатаR.color.ecc_chat_background
searchResultBackgroundсм. название поля: search Result BackgroundR.color.ecc_chat_background
filesAndMediaIconTintцвет иконок в разделе "Файлы и медиа"R.color.ecc_green_83b144
voiceBtnBackgroundцвет фона для кнопки записи звукового сообщенияmain
voiceBtnIconColorцвет кнопки записи звукового сообщенияR.color.ecc_white
sendBtnIconColorсм. название поля: send Btn Icon Colormain
messageSendingStatusцвет иконки статуса "отправляется"R.color.ecc_white
messageSentStatusцвет иконки статуса "отправлено"R.color.ecc_white
messageDeliveredStatusцвет иконки статуса "доставлено"R.color.ecc_white
messageReadStatusцвет иконки статуса "прочитано"R.color.ecc_white
messageFailedStatusцвет иконки статуса "ошибка"R.color.ecc_white
messageHighlightingцвет баббла при его подсветкеR.color.ecc_chat_highlighting
chatButtonTintColorStateListнабор цветов для разных состояний кнопкиarrayOf(disabledColor, main, main)
chatErrorScreenButtonTextцвет текста кнопки на экране с ошибкой при входе в чатR.color.ecc_white
chatErrorScreenMessageTextцвет текста сообщения на экране с ошибкой при входе в чатR.color.ecc_chat_new_system_message
chatErrorScreenImageTintцвет тента изображения на экране с ошибкой при входе в чатmain
pushBackgroundфоновый цвет для пуш-уведомленияR.color.ecc_push_background
pushMessageцвет текста в пуш-уведомленияхinputMessage
quotePlayPauseButtonцвет текста для кнопки запуска воспроизведения при цитировании сообщенияR.color.ecc_preview_play_pause_button
imageScreenBackgroundфоновый цвет на полноэкранном просмотре изображенияR.color.ecc_attachments_background
emptyStateBackgroundфоновый цвет, если нет сообщений в чатеR.color.ecc_empty_state_background
separatorsцвет разделителей в чатеR.color.ecc_icon_and_separators_color
unreadMsgStickerцвет стикера (фона под цифрами) непрочитанных сообщенийR.color.ecc_chat_unread_msg_sticker_background
microphoneцвет иконки микрофонаR.color.ecc_record_button_small_mic
balloonTextцвет текста во всплывающих сообщениях (Toast или Snackbar)R.color.ecc_black
balloonBackgroundфоновый цвет во всплывающих сообщениях (Toast или Snackbar)R.color.ecc_white
progressButtonStartDownloadTintцвет кнопки "загрузить файл" в начальном состоянии (загрузка еще не началась)bodyIconsTint
progressButtonInProgressTintцвет кнопки "загрузить файл" в процессе загрузкиbodyIconsTint
progressButtonCompletedTintцвет кнопки "загрузить файл" после загрузкиbodyIconsTint
progressButtonBackgroundTintфоновый цвет кнопки "загрузить файл"R.color.ecc_progress_button_background
surveySelectedColorFilterцвет для иконок при опросе, если опрос был выбранR.color.ecc_survey_selected_icon_tint
surveyUnselectedColorFilterцвет для иконок при опросе, если опрос не был выбранR.color.ecc_survey_unselected_icon_tint
bottomButtonTextColorцвет текста для кнопок внизу чата (камера, галерея, файл)R.color.ecc_chat_toolbar
bottomButtonsBackgroundцвет фона для кнопок внизу чата (камера, галерея, файл)R.color.ecc_white
imagesScreenTextцвет текста на полноэкранном просмотре изображенияR.color.ecc_white
emptyFilesAndMediaTextцвет текста в случае отсутствия элементов на экране "Файлы и медиа"R.color.ecc_black
audioStatusцвет текста для текущего статуса аудио ("processing", например)R.color.ecc_black
alertsTextцвет текста на всплывающих экранах (alerts)R.color.ecc_black
loaderTextColorцвет текста для сообщения при лоадереR.color.ecc_black
buttonsDefaultTextцвет текста по умолчанию для кнопокR.color.ecc_black
buttonsDefaultStrokeцвет границы по умолчанию для кнопокR.color.ecc_black
searchIconцвет для иконок поискаR.color.ecc_white
searchLoaderTintцвет иконки поиска для лоадера при загрузке результатов поиска в поле вводаR.color.ecc_white
searchResultsDividerцвет разделителя между элементами в результатах поискаR.color.ecc_search_divider_color
searchResultsItemRightArrowTintцвет для иконки "стрелка вправо" в результатах поискаR.color.ecc_search_results_item_secondary
searchResultsItemDateTextцвет текста для даты в результатах поискаR.color.ecc_search_results_item_secondary
searchResultsItemMessageTextцвет текста с сообщениемR.color.ecc_search_results_message_color
searchResultsItemNameTextцвет текста с автором сообщенияR.color.ecc_black
searchResultNoItemsTextцвет текста для сообщения при отсутствии результатов поискаR.color.ecc_black
searchBarTextцвет текста при вводе запросаR.color.ecc_white
chatToolbarHintTextцвет текста для подсказки при поиске в поле вводаR.color.ecc_chat_toolbar_hint
messageEditedStatusсм. название поля: message Edited StatusR.color.ecc_message_edited_color
quoteBgColorцвет фона цитатыR.color.ecc_quote_bg_color
quoteDelimiterColorцвет разделителя цитатыR.color.ecc_quote_delimiter_color
quoteAuthorColorTextцвет текста автораR.color.ecc_quote_author_color_text
quoteColorTextцвет текста цитатыR.color.ecc_quote_color_text
quoteIconTintColorсм. название поля: quote Icon Tint ColorR.color.ecc_white
infoIconсм. название поля: info IconR.color.ecc_error_red_df0000
searchHighlightсм. название поля: search Highlightmain
popupsBackgroundсм. название поля: popups BackgroundR.color.ecc_cian_b2dfdb

Справочник параметров ChatImages

Ниже перечислены все доступные поля ChatImages. Значения задаются ссылками на ресурсы изображений (R.drawable.*).

ПолеОписаниеЗначение по умолчанию
backBtnиконка для кнопки "назад" в тулбареR.drawable.ecc_ic_arrow_back_white_24dp
selectRingиконка круга, отображаемая в правом верхнем углу при выборе файла (невыбранное состояние)R.drawable.ecc_aqua_ring
loaderизображение главного лоадера по центру экранаR.drawable.ecc_im_loading
attachIconиконка присоединения файлаR.drawable.ecc_ic_attachment_button
voiceBtnBackgroundфоновое изображение для кнопки записи голосового сообщенияR.drawable.ecc_record_button_background
voiceBtnIconиконка микрофона для кнопки записи голосового сообщенияR.drawable.ecc_record_button_icon
sendBtnиконка для кнопки отправки голосового сообщенияR.drawable.ecc_ic_send_button
quoteClearBtnиконка для кнопки отмены цитированияR.drawable.ecc_ic_clear_36dp
clearSearchиконка для кнопки очистки поля ввода поискаR.drawable.ecc_ic_clear_gray_30dp
menuIconиконка для кнопки меню в тулбареR.drawable.ecc_ic_more_vert_24dp
downloadIconиконка для кнопки загрузки файлаR.drawable.ecc_ic_file_download_white_24dp
searchIconсм. название поля: search IconR.drawable.ecc_ic_search_white_24dp
playIconиконка для запуска воспроизведения голосового файлаR.drawable.ecc_voice_message_play
pauseIconиконка для приостановки воспроизведения голосового файлаR.drawable.ecc_voice_message_pause
copyIconиконка копирования файла (кнопка в тулбаре)R.drawable.ecc_ic_content_copy_24dp
replyIconиконка цитирования файла (кнопка в тулбаре)R.drawable.ecc_ic_reply_24dp
quickReplyButtonBackgroundфоновое изображение для кнопки быстрого цитированияR.drawable.ecc_quick_reply_button_background
surveyButtonBackgroundсм. название поля: survey Button BackgroundR.drawable.ecc_survey_button_backround
timestampOutgoingBackgroundфоновое изображение для метки времени в исходящем сообщенииR.drawable.ecc_timestamp_outgoing_underlayer
timestampIncomingBackgroundфоновое изображение для метки времени во входящем сообщенииR.drawable.ecc_timestamp_incoming_background
chatInputBackgroundфоновое изображение для поля ввода сообщенияR.drawable.ecc_chat_input_background
logoImageлоготип, отображаемый на экране приветствияR.drawable.ecc_welcome_logo
operatorAvatarPlaceholderплейсхолдер для изображения оператораR.drawable.ecc_operator_avatar_placeholder
imagePlaceholderплейсхолдер для изображения в сообщенииR.drawable.ecc_image_placeholder
outgoingImageMaskмаска для исходящего изображения, определяет его формуR.drawable.alt_ecc_outgoing_image_mask
incomingImageMaskмаска для входящего изображения, определяет его формуR.drawable.alt_ecc_incoming_image_mask
outgoingBubbleImageмаска для исходящего сообщения, определяет его формуR.drawable.alt_ecc_outgoing_bubble
incomingBubbleImageмаска для входящего сообщения, определяет его формуR.drawable.alt_ecc_incoming_bubble
scrollDownButtonIconиконка для кнопки прокрутки списка сообщений к последнемуR.drawable.ecc_scroll_down_icon
scrollDownBackgroundфоновое изображение для кнопки прокрутки списка сообщений к последнемуR.drawable.ecc_scroll_down_background
scrollUpButtonIconсм. название поля: scroll Up Button IconR.drawable.ecc_scroll_up_icon
scrollUpBackgroundсм. название поля: scroll Up BackgroundR.drawable.ecc_scroll_down_background
messageSendingиконка для статуса "отправляется"R.drawable.ecc_message_image_sending
messageSentиконка для статуса "отправлено"R.drawable.ecc_message_image_sending
messageDeliveredиконка для статуса "доставлено"R.drawable.ecc_message_image_delivered
messageReadиконка для статуса "прочитано"R.drawable.ecc_image_message_read
messageFailedиконка для статуса "ошибка"R.drawable.ecc_message_image_failed
rateStarSelectedиконка заполненной звезды при выставлении оценки (опрос)R.drawable.ecc_options_survey_selected
rateStarUnselectedиконка пустой звезды при выставлении оценки (опрос)R.drawable.ecc_options_survey_unselected
errorScreenImageизображение, отображаемое по центру экрана при ошибке загрузки чатаR.drawable.ecc_serious_worker
pushIconиконка, отображаемая в пуш-уведомленияхR.drawable.ecc_default_push_icon
balloonBackgroundфоновое изображение для всплывающего уведомления (Toast и Snackbar)R.drawable.ecc_background_snackbar
progressButtonStartDownloadиконка начала загрузки файлаR.drawable.ecc_ic_vertical_align_bottom_18dp
progressButtonInProgressиконка отмены загрузки файлаR.drawable.ecc_ic_clear_36dp
progressButtonCompletedиконка по окончанию загрузки файлаR.drawable.ecc_ic_file_outline_24dp
scheduleMessageIconиконка для сообщений с недоступным оператором в связи с его расписаниемR.drawable.ecc_schedule_icon
binarySurveyLikeUnselectedIconиконка незаполненного пальца вверх (опрос)R.drawable.ecc_binary_survey_like_unselected
binarySurveyLikeSelectedIconиконка заполненного пальца вверх (опрос)R.drawable.ecc_binary_survey_like_selected
binarySurveyDislikeUnselectedIconиконка незаполненного пальца вниз (опрос)R.drawable.ecc_binary_survey_dislike_unselected
binarySurveyDislikeSelectedIconиконка заполненного пальца вниз (опрос)R.drawable.ecc_binary_survey_dislike_selected
attachmentCameraIconиконка камеры, используется в нижнем меню чата при выборе изображенияR.drawable.ecc_ic_camera_42dp
attachmentGalleryIconиконка галереи, используется в нижнем меню чата при выборе изображенияR.drawable.ecc_ic_photo_42dp
attachmentFileIconиконка выбора файла, используется в нижнем меню чатаR.drawable.ecc_ic_file_fill_42dp
attachmentSendIconиконка отправки сообщения, если было прикреплено вложениеR.drawable.ecc_ic_send_42dp
attachmentQuoteIconиконка цитирования вложенияR.drawable.ecc_ic_reply_gray_24dp
searchLoaderиконка поиска для лоадера при загрузке результатов поиска в поле ввода. По умолчанию отображается дефолтный лоадерloader
searchResultsItemRightArrowиконка "стрелка вправо" в результатах поискаR.drawable.right_arrow
searchResultNoItemsImageизображение для сообщения при отсутствии результатов поискаR.drawable.ecc_search_not_found
messageEditedStatusIconизображение иконки для сообщения со статусом "отредактировано"R.drawable.ecc_message_image_edited
quoteBackgroundImageизображение фона цитатыR.drawable.ecc_quote_background
quoteIconBackgroundизображение подложки под иконкой файла или микрофонаR.drawable.ecc_circle_gray_48dp
quoteFileIconизображение файла в цитатах сообщения с вложениемR.drawable.ecc_ic_file_outline_24dp
quoteMicIconизображение микрофона в цитате аудиосообщенияR.drawable.ecc_ic_mic_24dp
quoteImageMaskмаска изображения в цитате сообщения с картинкойR.drawable.ecc_quote_image_mask
infoIconсм. название поля: info IconR.drawable.ecc_info_icon

Приоритеты темизации: ChatColors, ChatImages, Components и Flows

Система тем делится на несколько уровней:

  1. ChatColors / ChatImages / ChatTexts / ChatTypography
    Базовые таблицы значений. Здесь вы задаёте глобальные цвета, картинки и шрифты для всего SDK.

  2. ChatComponents
    Объединяет базовые таблицы и собирает из них готовые компоненты (кнопки, тулбар, бабблы сообщений, лоадеры и т.п.).
    Изменения на этом уровне влияют сразу на целые группы элементов.

  3. ChatFlows
    Финальный слой, где из компонентов собираются стили экранов и сценариев (chatFlow, searchFlow и т.д.).
    Здесь удобно точечно переопределять поведение конкретных элементов (например, только время сообщений с ошибкой).

Правило приоритета простое:

  • Если вы изменили значение в ChatColors / ChatImages, оно станет новым значением по умолчанию для всех компонентов.
  • Если вы переопределили поле в ChatComponents, оно будет использоваться во всех флоу, пока флоу не переопределит его самостоятельно.
  • Если вы меняете стили напрямую в ChatFlows (как в демо-приложении), именно они имеют наивысший приоритет.

Рекомендуемый порядок кастомизации:

  1. Сначала задать брендовые цвета и иконки через ChatColors и ChatImages.
  2. При необходимости — настроить компоненты (например, navigationBarStyle или audioPlayer).
  3. И только для особых кейсов (ошибки, особые сообщения и т.д.) — модифицировать ChatFlows.

Частые сценарии кастомизации

Ниже несколько типичных примеров настройки внешнего вида на основе демо-приложения.

Пример 1. Свои брендовые цвета бабблов и тулбара

val lightColors = ChatColors(
main = R.color.my_brand_main,
incomingBubble = R.color.my_incoming_bubble,
outgoingBubble = R.color.my_outgoing_bubble,
toolbar = R.color.my_toolbar_bg,
toolbarText = R.color.my_toolbar_text,
incomingText = R.color.my_incoming_text,
outgoingText = R.color.my_outgoing_text,
)

Теперь все элементы, которые используют эти цвета по умолчанию (бабблы, тулбар, кнопки), будут окрашены в ваши брендовые цвета.

Пример 2. Замена логотипа и иконки пуш-уведомлений

val lightImages = ChatImages(
logoImage = R.drawable.ic_my_brand_logo,
pushIcon = R.drawable.ic_my_push_icon,
)

Так вы меняете логотип на приветственном экране и иконку пушей в статус-баре.

Пример 3. Настройка темы через ChatComponents

val lightComponents = ChatComponents(
context = applicationContext,
colors = lightColors,
images = lightImages
).apply {
navigationBarStyle = navigationBarStyle.copy(
closeButtonEnabled = false
)
}

Здесь вы задаёте общие настройки компонентов (например, отключаете кнопку закрытия чата в тулбаре).

Пример 4. Точечная настройка через ChatFlows

val lightFlows = ChatFlows(lightComponents).apply {
// Меняем цвет подписи времени у сообщений с ошибкой
chatFlow.outcomeMessages.timeTextWhenError =
chatFlow.outcomeMessages.timeText.copy(
textColor = R.color.my_error_time_color
)

// Меняем иконку "play" в цитатах
chatFlow.quotePlayPauseButton = ImagesChatStyle(
imageResId = R.drawable.ic_my_play_icon,
tintColor = R.color.my_brand_main
)
}

val chatLightTheme = ChatTheme(lightFlows)

Этот подход повторяет логику из EdnaChatCenterApplication.initThemes() в демо-приложении:
сначала вы настраиваете компоненты, а затем при необходимости уточняете отдельные элементы через флоу.