我有一个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())));当我添加一些文本,比如"hello :-)“时,日志声明它找到了笑脸,并且正确地返回了该文本……但是.没有插入微笑?可绘图在那里,它是一个png文件。
编辑 OK,所以我看到的文本与我输入的"hello :-)“完全一样,所以似乎根本没有执行映射。因此,没有用图像替换:-)。
看了几个教程,但没有找到解决方案,因为它似乎是我正在做的一切,根据这本书。
谢谢你的帮助。
发布于 2019-03-26 11:09:03
但在我的例子中,我用的是片段,所以我用
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); https://stackoverflow.com/questions/22956021
复制相似问题