您好,我正在尝试将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.-如何显示图像?
答案 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);