假设我有一个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才能将其完全删除)