如何从inputConnection检测并删除Unicode序列表情符号?

时间:2019-02-17 02:21:58

标签: android emoji inputconnection

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

删除一个简单的字母字符就可以了,

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

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

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


笑脸:

Unicode代码点:U+1F600

Java逸出:\ud83d\ude00


在这种情况下,我只需删除2个字符。

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


彩虹旗:️‍

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

Java逸出:\ud83c\udff3\ufe0f\u200d\ud83c\udf08


当我按退格键时,只会删除一个Java转义字符,而不是整个表情符号。对于标志示例,仅删除此\udf08的最后一部分,向用户显示错误的表情符号。代理配对检查不会让我误入歧途,我仍然会搞砸表情符号。

如何正确找出要删除的正确字符数,因此在按Backspace键时会删除1个整个表情符号? (对于标志示例,我需要获取数字6才能将其完全删除)

0 个答案:

没有答案