Можно использовать библиотеку от Google. Добавляем зависимость:
dependencies {
...
implementation "androidx.emoji:emoji:28.0.0"
}
инициализируем конфигурацию:
val fontRequest = FontRequest(
"com.example.fontprovider",
"com.example",
"emoji compat Font Query",
CERTIFICATES
)
val config = FontRequestEmojiCompatConfig(this, fontRequest)
EmojiCompat.init(config)
понятие кастомности эмодзи не очень понятно, так как это просто сочетание символов, и думаю что если их нету в стандартной поддержке, то вы их сами будете должны нарисовать. Для своего виджета подключение библиотеки происходит так:
class MyTextView(context: Context) : AppCompatTextView(context) {
private val emojiTextViewHelper: EmojiTextViewHelper by lazy(LazyThreadSafetyMode.NONE) {
EmojiTextViewHelper(this).apply {
updateTransformationMethod()
}
}
override fun setFilters(filters: Array<InputFilter>) {
super.setFilters(emojiTextViewHelper.getFilters(filters))
}
override fun setAllCaps(allCaps: Boolean) {
super.setAllCaps(allCaps)
emojiTextViewHelper.setAllCaps(allCaps)
}
}
вот полезный туториал по данной тематике.
UPDATE
Библиотека выше deprecated, вместо нее гугл предлагает использовать данную эмодзи зависимость - Emoji2. Если же хочется получить +/- готовое решение, то можно воспользоваться таким вариантом