在聊天中显示表情符号

时间:2014-11-03 19:51:54

标签: android

您好,我正在尝试将emojis应用到我的聊天xmpp应用中。

这是我在EditText中获取表情符号的代码

  private OnClickListener emoclic = new OnClickListener() {
    @Override
    public void onClick(View v) {

    Drawable happySmiley = getActivity().getResources().getDrawable(R.drawable.emo2); 
             happySmiley .setBounds(0, 0, 22,22); 
    SpannableStringBuilder builder = new SpannableStringBuilder();
                           builder.append("[emo2_anchor]"); 
                           builder.setSpan(new ImageSpan(happySmiley), builder.length()-"                  
                           [hotel2_anchor]".length(),
                           builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
     chatMsg.getText().append(builder);
        }

    };

但结果是

  

"喜!!! [emo2_anchor]"

我的问题是:

1.-为什么[emo2_anchor]正在显示?

2.-如何显示图像?

1 个答案:

答案 0 :(得分:1)

首先,您在字符串中插入[emo2_anchor],但使用[hotel2_anchor]作为长度。

其次,您必须检查Spannable.SPAN_EXCLUSIVE_EXCLUSIVE是否与您对字符索引的使用相匹配,或者是否有一个错误。

第三,您不必使用自己的占位符和替换图像。您可以让您的用户正常输入表情符号(例如,从他们的软件键盘),并在字符串中包含Unicode代码点。 Android 4.1.1中的内置表情符号字体将处理渲染。如果您需要支持每个API级别,this library可以为您提供帮助。

无论如何,请尝试这些行:

SpannableStringBuilder builder = new SpannableStringBuilder();
String placeholder = "[emo2_anchor]";
String myText = chatMsg.getText().toString()+" "+placeholder;
builder.append(myText);
builder.setSpan(new ImageSpan(happySmiley), myText.indexOf(placeholder), myText.indexOf(placeholder)+placeholder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
chatMsg.setText(builder);