我有一个TextView,我想插入一个笑脸。我使用以下代码将笑脸插入Spannable
private static final Map<String, Integer> emoticons = new HashMap<String, Integer>();
static {
emoticons.put(":)", R.drawable.smileyon);
emoticons.put(":-)", R.drawable.smileyon);
}
public Spannable getSmiledText(String text) {
SpannableStringBuilder builder = new SpannableStringBuilder(text);
if (emoticons.size() > 0) {
int index;
for (index = 0; index < builder.length(); index++) {
if (Character.toString(builder.charAt(index)).equals(":")) {
for (Map.Entry<String, Integer> entry : emoticons.entrySet()) {
int length = entry.getKey().length();
if (index + length > builder.length())
continue;
if (builder.subSequence(index, index + length).toString().equals(entry.getKey())) {
builder.setSpan(new ImageSpan(getContext(), entry.getValue()), index, index + length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Log.v("CheckChat", "Found new smily ");
index += length - 1;
break;
}
}
}
}
}
Log.v("CheckChat", "Returning text " + builder);
return builder;
}
chatLine.setText(getSmiledText(chatmessage.getMessage()) + " "
+ DateUtil.timestampToTime(Integer.parseInt(chatmessage.getMessageTime())));
当我添加一些文字时,比如&#34;你好: - )&#34;日志表明它找到了笑脸并且文本被正确返回.....但是......没有插入笑脸? drawable在那里,它是一个png文件。
修改 好的,所以我完全按照我的标准看到了文字&#34;你好: - )&#34;所以似乎根本没有执行映射。因此:-)没有被图像取代。
看了几个教程,但找不到解决方案,因为看起来我按照这本书做了一切。
感谢您的帮助。
答案 0 :(得分:0)
但是在我的情况下,我使用的是片段,所以我使用了
text.setSpan(new ImageSpan(container.getContext(),R.drawable.image),0,0,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
而不是直接传递Drawable
text.setSpan(new ImageSpan(getResources().getDrawable(R.drawable.image)),0,1,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
只需添加解决OP问题的方法,正如Fabio所述,答案是
Drawable myIcon = context.getResources().getDrawable(entry.getValue());
myIcon.setBounds(0, 0, 60, 60);
spannable.setSpan(new ImageSpan(myIcon, ImageSpan.ALIGN_BOTTOM), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);