用退格去除整个Spannable

我有一个聊天应用程序,它提供了向文本添加表情符号的可能性。

我遇到了EditText字段的问题。 图释图像显示出来,但如果我按下正常的键盘上的退格button,我正在更改为表情符号图片的文本出现,我必须删除几个字符,直到图片消失。 我正在使用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<Pattern, Integer> 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; } 

Solutions Collecting From Web of "用退格去除整个Spannable"

所以你不能强迫键盘做到这一点 – 键盘通常不会看这种信息。 你可以做的是放置一个TextWatcher的编辑字段,并重写afterTextChanged检测到这种情况下,并删除所需的额外字符。 这将是一个痛苦,但它是可行的。