8

我正在构建一个简单的聊天应用程序,用户可以在其中发送文本和表情符号。我可以将文本和表情符号发送到另一部手机。我的问题是:

1.当我输入一些东西并添加一个表情时:

在此处输入图像描述

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

在此处输入图像描述

2.当我只在Edittext中添加一个表情然后我删除它时,我无法输入任何内容,因为删除的表情出现了。它只出现一次,所以无论我输入多少个字符,EditText 看起来就像我删除表情符号之前一样,但是文本是在没有表情符号的情况下发送的,就像在所有三种情况下一样。

3.当我在 EditText 中输入“something”然后在“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();
    }
});
4

2 回答 2

6

我找到了解决方案。我所要做的就是 Spannable.SPAN_INCLUSIVE_INCLUSIVE改变Spannable.SPAN_EXCLUSIVE_EXCLUSIVE

于 2012-12-14T16:22:30.143 回答
0

我会在该edittext中添加一个textwatcher并在用户输入时观看,这样我就可以重新定位图像/设置文本/进行更正/验证输入/等。

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) { }
};
于 2012-12-13T20:40:26.633 回答