Перейти к основному содержимому
Версия: 5.6.1

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

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

В классе 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) // создайте инстанс темы, переопределив точечно нужные элементы

То есть при создании тем вы можете определять как компоненты, которые на более низком уровне будут задавать стили для 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