I'm working on a custom keyboard and I'm using deleteSurroundingText
to delete characters. I only have two issue with this. deleteSurroundingText
doesn't work well while deleting emojis. I need to press del
button twice in order to get rid of single emoji. And second del
key is not working with select all
option.
case Keyboard.KEYCODE_DELETE:
getCurrentInputConnection().deleteSurroundingText(1,0);
break;
This is what happens to emoji when I press try to del an emoji:
?
It turns into a question mark.
Also, when I try to del text by doing select all
nothing happens.
Any help would be appreciated
答案 0 :(得分:1)
Java使用16位字符(请参阅文档中的note)。因此,一个字符可以存储从U+0000
到U+FFFF
的代码点。
现代unicode定义从U+0000
到U+10FFFF
的代码点范围。
大多数表情符号的代码点都超过U+FFFF
。为了表示这样的代码点,使用了所谓的“surrogate pairs”
换句话说,每个表情符号(以及U+FFFF
边界以外的所有其他代码点)都由字符串中的两个后续字符表示。
当你致电deleteSurroundingText(1,0);
时,你腐败了代理人对。尚未删除的代理对的部分将呈现为?
标记。
deleteSurroundingText()的文档特别强调了这种情况:
IME作者:请注意不要只删除代理对的一半。另外注意不要删除比编辑器中更多的字符,因为这可能会对应用程序产生不良影响。调用此方法将导致编辑器在批输入结束后调用服务上的onUpdateSelection(int,int,int,int,int,int)。
请在尝试使用之前仔细阅读方法文档。
使用Chracter::isSurrogate()方法判断字符是否是代理对的一部分。
答案 1 :(得分:0)
如果存在某些选择,并且应将其全部删除,则可以使用commitText("", 1)
-这将用空字符串替换选择的文本。