我正在建立一个简单的聊天应用程序,用户有能力发送文本和表情。我可以把短信和表情都发到另一部手机。我的问题是:
1.当我键入某些内容并添加一个表情符号:

然后我就不能在图像之前和之后键入任何文本。我可以在字母"o“之前写。系统“看到”了我输入的内容,所以即使我在微笑后键入“蜜”,我也看不到它,但是EditText注册了它,并发送了消息:

2.当我在编辑文本中添加一个表情符号,然后删除它时,我不能输入任何内容,因为删除的表情符号会出现。它只出现一次,所以不管我输入了多少字符,EditText看起来就像我删除表情符号之前的样子,但是文本发送时没有表情符号,就像在所有三种情况下一样。
3.当我在EditText中键入“某事”时,在“some”之后插入一个表情符号:

然后我把光标放在表情符号后面,然后删除它,剩下的是:

但是,当我按下“发送”按钮时,就会发送正确的消息:

这就是表情符号的按钮侦听器中的内容(当我单击这个表情符号将它添加到EditText中时,这个方法就被激活了)。
ib_happy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int cursorPosition = mOutEditText.getSelectionStart();
mOutEditText.getText().insert(cursorPosition, smileys[0]);
SpannableStringBuilder ssb = new SpannableStringBuilder(mOutEditText.getText());
ssb.setSpan(new ImageSpan(bitmapArray.get(0), ImageSpan.ALIGN_BASELINE), cursorPosition, cursorPosition+2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
mOutEditText.setText(ssb, BufferType.SPANNABLE);
mOutEditText.setSelection(cursorPosition+2);
dialog_emoticon.dismiss();
}
});发布于 2012-12-14 16:22:30
我找到了解决办法。我所要做的就是把Spannable.SPAN_INCLUSIVE_INCLUSIVE改为Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
发布于 2012-12-13 20:40:26
我会在编辑文本中添加一个文本处理程序,并观察用户类型,这样我就可以重新定位图像/设置文本/作出更正/验证输入/等等。
editText.addTextChangedListener(textWatcher);
textWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
//editText.doStuffHere
//reposition your image/etc.
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
public void onTextChanged(CharSequence s, int start, int before, int count) { }
};https://stackoverflow.com/questions/13867815
复制相似问题