Библиотека ChatKit

В мире iOS-разработки есть всем известная библиотека JSQMessagesViewController, которая помогает iOS-разработчикам без особого труда реализовать UI чата в своих приложениях. К сожалению, Android-разработчики лишены такого чудесного инструмента. Поэтому мы задались целью предоставить разработчикам Android широкие возможности для создания быстрого и привлекательного пользовательского интерфейса для чатов в своих приложениях.

ChatKit — это библиотека, предназначенная для упрощения разработки пользовательского интерфейса для такой тривиальной задачи, как чат. Библиотека располагает гибкими возможностями для стилизации, настроек и управления данными.

Особенности:

  • Готовое к употреблению, то есть уже разработанное решение для быстрой реализации;
  • Полностью настраиваемые макеты — установка стилей из коробки (используйте собственные цвета, текстовые изображения, растяжки, селектора и размеры) или же создание собственной пользовательской разметки и/или холдеров для уникального поведения;
  • Список диалогов, включая тет-а-тет и групповые чаты, маркеры для непрочитанных сообщений и просмотр последних сообщений пользователя;
  • Список сообщений (входящих и исходящих) с постраничной хронологией и уже рассчитанными заголовками дат;
  • Различные аватары без конкретной реализации загрузки изображений — вы можете использовать любую библиотеку на свой вкус;
  • Режим выбора для взаимодействия с сообщениями;
  • Легкое форматирование дат;

  • Ваши собственные модели для диалогов и сообщений. Конвертации не требуется;
  • Готово к использованию представления ввода сообщений;
  • Пользовательские анимации (в соответствии с использованием RecyclerView).

Для реализации чата разработчику предоставляется три компонента:

1. DialogsList

Компонент для отображения и управления списком диалогов. Основные функции: быстрая и простая реализация, поддержка диалога тет-а-тет и групповой диалог, маркеры непрочитанных сообщений. Также существует несколько методов настройки для изменения внешнего вида списка диалогов и реализации дополнительных функций, которые по умолчанию не включены.

DialogsList

2. MessageList

Это компонент для отображения и управления сообщениями в разговоре. Его основной особенностью является правильное и простое взаимодействие со списком сообщений и заголовком даты, который реализуется через адаптер. Кроме того, он поддерживает несколько уровней настройки, позволяющих добавлять все функции, которые не были включены по умолчанию.

MessageList

3. MessageInput

MessageInput является вспомогательным компонентом для ввода текстовых сообщений, он поддерживает простую проверку и обрабатывает все состояния кнопки «отправить». Кроме того, он поддерживает достаточно атрибутов для стилизации внешнего вида.

MessageInput

У всех компонентов есть возможность стилизация с помощью xml-атрибутов.

С помощью атрибутов в DialogsList мы можем изменять отдельно для прочитанных и непрочитанных диалогов: цвет фона элемента списка, размер шрифта, цвет и стиль текста для заголовка диалога, последнего сообщения, даты последнего сообщения. А также размеры аватара диалога и размеры аватара автора сообщения (только для групповых чатов), настройку разделителя между элементами (внешний вид, цвет, отступы).

Атрибуты в MessageList позволяют нам установить цвет фона по умолчанию для входящих и исходящих сообщений, и даже цвета для их состояний «нажат» и «выбран». Мы также можем изменить цвет и размер шрифта сообщения, текста времени отправки и заголовка.

Используя доступные атрибуты виджета MessageInput, мы можем изменить цвет и размер текста и подсказки ввода, максимальное количество разрешенных строк, размер и отступ кнопки «отправить», а также ее значок и фон.

Но что, если вам нужно не только изменить внешний вид элементов, но и их положение? Это не имеет значения, потому что вы можете создать свой собственный макет! Единственное условие — идентификаторы элементов должны соответствовать идентификаторам по умолчанию, а типы виджета не должны вызывать исключение класса ClassCastException (т.е., быть того же типа или типом подкласса).

Пример кастомизации изменения макета MessageList:

Chat custom layout

Иногда отображения текста сообщения недостаточно. Например, вам нужно добавить статус обработки сообщения и реакцию на сообщение (как в Slack). Конечно, для этого вам нужно создать свой собственный макет, но вы не можете это сделать без изменения логики ViewHolder. Потому в нашей библиотеке есть возможность использования своего собственного ViewHolder для элементов.

Ознакомится с документацией и посмотреть примеры использования даного решения вы можете на нашей GitHub-странице библиотеки.