使用退格键删除整个Spannable

我有一个聊天应用程序,可以在文本中添加表情符号。

我的EditText字段有问题。 表情符号图像显示但是如果我按下普通键盘上的退格按钮,我正在更改为表情符号图片的文本显示,我必须删除几个字符,直到图片消失。 我正在使用Spannable来做到这一点。

如果用户按下一次退格键,我希望整个笑脸消失。

这里是我使用的代码:

 // This is in the keyclicked listener { ... smilie = "(angel)"; break; ... int cursorPosition = content.getSelectionStart(); content.getText().insert(cursorPosition, getSmiledText(this, smilie)); content.getText().insert(cursorPosition + smilie.length(), " "); } public static boolean addSmiles(Context context, Spannable spannable) { boolean hasChanges = false; for (Entry entry : smilies.entrySet()) { Matcher matcher = entry.getKey().matcher(spannable); while (matcher.find()) { boolean set = true; for (ImageSpan span : spannable.getSpans(matcher.start(), matcher.end(), ImageSpan.class)) if (spannable.getSpanStart(span) >= matcher.start() && spannable.getSpanEnd(span) <= matcher.end()) spannable.removeSpan(span); else { set = false; break; } if (set) { hasChanges = true; spannable.setSpan(new ImageSpan(context, entry.getValue()), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } } return hasChanges; } public static Spannable getSmiledText(Context context, CharSequence text) { Spannable spannable = spannableFactory.newSpannable(text); addSmiles(context, spannable); return spannable; } 

所以你不能强迫键盘这样做 – 键盘通常不会看那种信息。 您可以做的是在编辑字段上放置TextWatcher并覆盖afterTextChanged以检测此情况并删除所需的其他字符。 这将是一种痛苦,但它是可行的。