表情工具类,用于在TextView与EditText中插入表情图片:
public class FaceUtil {    public int[] faceIds;    public String[] faceCodes;    public Map mFaceMap;    private String key0;    private String key;    private static FaceUtil mFaceUtil = new FaceUtil();    private FaceUtil(){faceIds = new int[] { R.drawable.face0,R.drawable.face1, R.drawable.face2, R.drawable.face3,R.drawable.face4, R.drawable.face5, R.drawable.face6,R.drawable.face7, R.drawable.face8, R.drawable.face9,R.drawable.face10, R.drawable.face11, R.drawable.face12,R.drawable.face13, R.drawable.face14, R.drawable.face15,R.drawable.face16, R.drawable.face17, R.drawable.face18,R.drawable.face19, R.drawable.face20, R.drawable.face21,R.drawable.face22, R.drawable.face23, R.drawable.face24,R.drawable.face25, R.drawable.face26, R.drawable.face27,R.drawable.face28, R.drawable.face29, R.drawable.face30,R.drawable.face31, R.drawable.face32, R.drawable.face33,R.drawable.face34, R.drawable.face35, R.drawable.face36,R.drawable.face37, R.drawable.face38, R.drawable.face39,R.drawable.face40, R.drawable.face41, R.drawable.face42,R.drawable.face43, R.drawable.face44, R.drawable.face45,R.drawable.face46, R.drawable.face47, R.drawable.face48,R.drawable.face49, R.color.white, R.color.white, R.color.white,R.color.white, R.color.white, R.color.white };faceCodes = new String[] { "[face:0]", "[face:1]", "[face:2]","[face:3]", "[face:4]", "[face:5]", "[face:6]", "[face:7]", "[face:8]", "[face:9]", "[face:10]","[face:11]", "[face:12]", "[face:13]", "[face:14]", "[face:15]", "[face:16]", "[face:17]", "[face:18]","[face:19]", "[face:20]", "[face:21]", "[face:22]", "[face:23]", "[face:24]", "[face:25]", "[face:26]","[face:27]", "[face:28]", "[face:29]", "[face:30]", "[face:31]", "[face:32]", "[face:33]", "[face:34]","[face:35]", "[face:36]", "[face:37]", "[face:38]", "[face:39]", "[face:40]", "[face:41]", "[face:42]","[face:43]", "[face:44]", "[face:45]", "[face:46]", "[face:47]", "[face:48]", "[face:49]", "/0050","/0051", "/0052", "/0053", "/0054", "/0055" };mFaceMap = new HashMap();mFaceMap.put("[face:0]", R.drawable.face0);mFaceMap.put("[face:1]", R.drawable.face1);mFaceMap.put("[face:2]", R.drawable.face2);mFaceMap.put("[face:3]", R.drawable.face3);mFaceMap.put("[face:4]", R.drawable.face4);mFaceMap.put("[face:5]", R.drawable.face5);mFaceMap.put("[face:6]", R.drawable.face6);mFaceMap.put("[face:7]", R.drawable.face7);mFaceMap.put("[face:8]", R.drawable.face8);mFaceMap.put("[face:9]", R.drawable.face9);mFaceMap.put("[face:10]", R.drawable.face10);mFaceMap.put("[face:11]", R.drawable.face11);mFaceMap.put("[face:12]", R.drawable.face12);mFaceMap.put("[face:13]", R.drawable.face13);mFaceMap.put("[face:14]", R.drawable.face14);mFaceMap.put("[face:15]", R.drawable.face15);mFaceMap.put("[face:16]", R.drawable.face16);mFaceMap.put("[face:17]", R.drawable.face17);mFaceMap.put("[face:18]", R.drawable.face18);mFaceMap.put("[face:19]", R.drawable.face19);mFaceMap.put("[face:20]", R.drawable.face20);mFaceMap.put("[face:21]", R.drawable.face21);mFaceMap.put("[face:22]", R.drawable.face22);mFaceMap.put("[face:23]", R.drawable.face23);mFaceMap.put("[face:24]", R.drawable.face24);mFaceMap.put("[face:25]", R.drawable.face25);mFaceMap.put("[face:26]", R.drawable.face26);mFaceMap.put("[face:27]", R.drawable.face27);mFaceMap.put("[face:28]", R.drawable.face28);mFaceMap.put("[face:29]", R.drawable.face29);mFaceMap.put("[face:30]", R.drawable.face30);mFaceMap.put("[face:31]", R.drawable.face31);mFaceMap.put("[face:32]", R.drawable.face32);mFaceMap.put("[face:33]", R.drawable.face33);mFaceMap.put("[face:34]", R.drawable.face34);mFaceMap.put("[face:35]", R.drawable.face35);mFaceMap.put("[face:36]", R.drawable.face36);mFaceMap.put("[face:37]", R.drawable.face37);mFaceMap.put("[face:38]", R.drawable.face38);mFaceMap.put("[face:39]", R.drawable.face39);mFaceMap.put("[face:40]", R.drawable.face40);mFaceMap.put("[face:41]", R.drawable.face41);mFaceMap.put("[face:42]", R.drawable.face42);mFaceMap.put("[face:43]", R.drawable.face43);mFaceMap.put("[face:44]", R.drawable.face44);mFaceMap.put("[face:45]", R.drawable.face45);mFaceMap.put("[face:46]", R.drawable.face46);mFaceMap.put("[face:47]", R.drawable.face47);mFaceMap.put("[face:48]", R.drawable.face48);mFaceMap.put("[face:49]", R.drawable.face49);    }    public static FaceUtil getFaceUtil(){        if(mFaceUtil == null){            mFaceUtil = new FaceUtil();        }        return mFaceUtil;    }    /**    * 将表情图片及文本加入到EditText中    * @param context    * @param editText    * @param imgId    */    public void addFaceToEditText(Context context, EditText editText, String faceCode, int faceId) {        int start = editText.getSelectionStart();        Spannable spannable = editText.getText().insert(start, faceCode);        Drawable drawable = context.getResources().getDrawable(faceId);        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());         ImageSpan imageSpan = new ImageSpan(drawable, faceCode, ImageSpan.ALIGN_BASELINE);         spannable.setSpan(imageSpan, start, start + faceCode.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    }    /**    * 将表情图片及文本加入到TextView中    * @param context    * @param textView    */    public void addFacesToTextView(final Context context, TextView textView, String str){        boolean one = true;        boolean isFace = false;        boolean isFaceFirst = false;        List faceList = new ArrayList();        String text = str;        Pattern p = Pattern.compile("face:[0-9]+");        final Matcher m = p.matcher(text);        while(m.find()){            key0 = m.group();            key = "["+m.group()+"]";            if(mFaceMap.get(key) == null){                textView.setText(str);                return;            }            isFace = true;            ImageGetter imageGetter = new ImageGetter() {                public Drawable getDrawable(String source) {                    Drawable drawable = context.getResources().getDrawable(mFaceMap.get(key));                    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());                    return drawable;                }            };            if(text.length() != key.length() && text.indexOf(key) != 0){                one = false;                isFaceFirst = false;            }else if(text.length() != key.length() && text.indexOf(key) == 0){                one = false;                isFaceFirst = true;            }else if(text.length() == key.length() && one){                textView.setText("");                textView.append(Html.fromHtml("", imageGetter, null));                return;            }            Spanned spanned = Html.fromHtml("", imageGetter, null);            faceList.add(spanned);            text = text.replaceAll("\\[" + key0 + "\\]", "=");        }        if(isFace){            textView.setText("");            String[] textArray = text.split("=");            /**哪个数组大就以此数组个数为循环次数**/            int len = 0;            if(textArray.length > faceList.size()){                len = textArray.length;            }else{                len = faceList.size();            }            for (int i = 0; i < len; i++) {                if(textArray.length > faceList.size()){                    if(i < faceList.size()){                        if(isFaceFirst){                            textView.append(faceList.get(i));                            textView.append(textArray[i]);                        }else {                            textView.append(textArray[i]);                            textView.append(faceList.get(i));                        }                    }else{                        textView.append(textArray[i]);                    }                }else{                    if(i < textArray.length){                        if(isFaceFirst){                            textView.append(faceList.get(i));                            textView.append(textArray[i]);                        }else {                            textView.append(textArray[i]);                            textView.append(faceList.get(i));                        }                    }else{                        textView.append(faceList.get(i));                    }                }            }        }    }    public void onDestroy(){        key0 = null;        key = null;        faceIds = null;        faceCodes = null;        if(mFaceMap != null){            mFaceMap.clear();            mFaceMap = null;        }        mFaceUtil = null;    }}


给TextView插入表情图片:

TextView tv = ...;String msg = "高兴[face:2],无奈[face:10][face:11]";FaceUtil.getFaceUtil().addFacesToTextView(mContext, tv, msg);


给EditText插入表情图片:

EditText et = ...;FaceUtil.getFaceUtil().addFaceToEditText(mContext, et, "[face:10]", R.drawable.face10);


更多相关文章

  1. android 如何让文本中某个关键字高亮显示?
  2. 关于android的imagebutton,imageview等无文本控件警告的解决办法
  3. Android 实现可用于文本选择的浮动工具栏
  4. android 设置文本透明度
  5. Color State List用于控件在各状态下的文本颜色显示
  6. 常用控件应用之文本框(TextView)特效
  7. android 文本框部分文字的点击事件
  8. android 多彩文本实现
  9. Android Studio高级控件(自动提示文本框)

随机推荐

  1. Android(安卓)BigNews 曾量更新
  2. [Unity3D]Android实现不锁屏
  3. [Android]调用字符串资源的几种方法
  4. 一个打通jni,java framework,application三
  5. Android Activity切换动画效果详解(附源代
  6. [Gradle for Android 笔记系列]二 、Pack
  7. adb server is out of date. killing
  8. Android帧缓冲区(Frame Buffer)硬件抽象层(H
  9. android studio 编译加速
  10. Android(安卓)单选之史上最简单的ListVie