Spannable不显示图像

时间:2014-04-09 07:47:00

标签: android

我有一个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;所以似乎根本没有执行映射。因此:-)没有被图像取代。

看了几个教程,但找不到解决方案,因为看起来我按照这本书做了一切。

感谢您的帮助。

1 个答案:

答案 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);