使用Spannable上的文本视图显示表情符号 [英] show emoticon using Spannable on a text view

查看:238
本文介绍了使用Spannable上的文本视图显示表情符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要证明我的表情符号的文本视图。

 私人的HashMap<字符串,整数>图释=新的HashMap<字符串,整数>();

emoticons.put(:-),R.drawable.f01);
emoticons.put(:P,R.drawable.f02);
emoticons.put(:D,R.drawable.f03);
 

现在假设我有一个的EditText ,我输入: - ),在它的点击一按钮,我想发送给的TextView 它会显示相应的资源。在这种情况下的f01

我如何做到这一点?

解决方案

  //试试这个
textview.setText(getSmiledText(text.toString()));

公共Spannable getSmiledText(字符串文本){
        SpannableStringBuilder建设者=新SpannableStringBuilder(文本);
        如果(emoticons.size()大于0){
            INT指数;
            对于(指数= 0;指数< builder.length();指数++){
                如果(Character.toString(builder.charAt(索引))等于(:)){
                    对于(Map.Entry的<字符串,整数>输入:emoticons.entrySet()){
                        INT长度= entry.getKey()长度()。
                        如果(指数+长度GT; builder.length())
                            继续;
                        如果(builder.subSequence(索引,索引+长度)的ToString()。等于(entry.getKey())){
                            builder.setSpan(新ImageSpan(的getContext(),entry.getValue()),指数,指数+长度,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                            指数+ =长度 -  1;
                            打破;
                        }
                    }
                }
            }
        }
        返回建设者;
    }
 

I need to show my emoticon on a text view.

private HashMap<String, Integer> emoticons = new HashMap<String, Integer>();

emoticons.put(":-)", R.drawable.f01);
emoticons.put(":P", R.drawable.f02);
emoticons.put(":D", R.drawable.f03);

Now suppose I have a EditText and I am typing ":-)" in it on click on a button I want to send this to a TextView where it will show the corresponding resource. In this case f01.

How do I do this ?

解决方案

// try this
textview.setText(getSmiledText(text.toString()));

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);
                            index += length - 1;
                            break;
                        }
                    }
                }
            }
        }
        return builder;
    }

这篇关于使用Spannable上的文本视图显示表情符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆