3

假设我有一个 edittext 字段,我必须在其上实现“退格”功能。

删除一个简单的字母字符很好,它可以工作:

Character.isLetter(inputConnection.getTextBeforeCursor(1, 0).toString()) {
   inputConnection.deleteSurroundingText(1, 0);
}

当字符是表情符号时,问题就来了。

它的长度表示为 2 个 utf-16 字符,例如:


笑脸:

Unicode 代码点:U+1F600

Java转义:\ud83d\ude00


在这种情况下,我会简单地删除 2 个字符。

但是,在某些情况下,表情符号由多个代码点组成,例如:


彩虹旗:️‍</p>

Unicode 代码点序列:U+1F3F3 U+FE0F U+200D U+1F308

Java转义:\ud83c\udff3\ufe0f\u200d\ud83c\udf08


当我按退格键时,只有一个 java 转义字符被删除,而不是整个表情符号。例如标志,只有\udf08最后一部分会被删除,向用户展示搞砸的表情符号。代理对检查并不能让我摆脱困境,我仍然会搞砸表情符号。

如何正确找出要删除的正确字符数量,以便在按退格键时删除 1 个完整的表情符号?(对于标志示例,我需要获得数字 6,才能完全删除它)

4

0 回答 0