首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spannable不显示图像

Spannable不显示图像
EN

Stack Overflow用户
提问于 2014-04-09 07:47:00
回答 1查看 3.3K关注 0票数 3

我有一个TextView,我想在其中插入一个笑脸。我使用下面的代码将笑脸插入到Spannable中

代码语言:javascript
复制
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 :-)“完全一样,所以似乎根本没有执行映射。因此,没有用图像替换:-)。

看了几个教程,但没有找到解决方案,因为它似乎是我正在做的一切,根据这本书。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-03-26 11:09:03

但在我的例子中,我用的是片段,所以我用

代码语言:javascript
复制
text.setSpan(new ImageSpan(container.getContext(),R.drawable.image),0,0,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

而不是直接传递Drawable

代码语言:javascript
复制
text.setSpan(new ImageSpan(getResources().getDrawable(R.drawable.image)),0,1,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

只是想补充一下是什么解决了OP问题,正如Fabio所指出的,答案是

代码语言:javascript
复制
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); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22956021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档