Допустим, у меня есть поле edittext, и я должен реализовать на нем функциональность "backspace".
Удаление простого буквенного символа - это хорошо, оно работает:
Character.isLetter(inputConnection.getTextBeforeCursor(1, 0).toString()) {
inputConnection.deleteSurroundingText(1, 0);
}
Проблеманаступает, когда персонаж является символом смайликов.
Его длина выражается как 2 utf-16 символов, например:
Улыбающееся лицо: face
Код Unicode: U+1F600
Java escape: \ud83d\ude00
В таком случае я бы просто удалил 2 символа.
Однако есть случаи, когда эмодзи формируется из нескольких кодовых точек, например:
Радужный флаг: ?️?
Последовательность кодов Unicode: U+1F3F3 U+FE0F U+200D U+1F308
Java escape: \ud83c\udff3\ufe0f\u200d\ud83c\udf08
Когда я нажимаю клавишу Backspace, удаляется только один экранированный символ java, а не целые эмодзи.Например, флаг, только эта последняя часть \udf08
будет удалена, предоставляя пользователю испорченный символ эмодзи.Проверка суррогатной пары не выводит меня из этой дыры, я бы все равно облажался с эмодзи.
Как правильно определить правильное количество символов для удаления, поэтому я бы удалил 1 целую эмодзи, когданажатие на клавишу возврата?(для примера флага мне нужно получить число 6, чтобы полностью его удалить)