我有一个聊天应用程序,可以在文本中添加表情符号。
我的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<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;
}
答案 0 :(得分:2)
所以你不能强迫键盘这样做 - 键盘通常不会看那种信息。您可以做的是在编辑字段上放置TextWatcher并覆盖afterTextChanged以检测此情况并删除所需的其他字符。这将是一种痛苦,但它是可行的。