Android:TextView与EditText中插入表情图片
16lz
2021-01-23
表情工具类,用于在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);
更多相关文章
- android 如何让文本中某个关键字高亮显示?
- 关于android的imagebutton,imageview等无文本控件警告的解决办法
- Android 实现可用于文本选择的浮动工具栏
- android 设置文本透明度
- Color State List用于控件在各状态下的文本颜色显示
- 常用控件应用之文本框(TextView)特效
- android 文本框部分文字的点击事件
- android 多彩文本实现
- Android Studio高级控件(自动提示文本框)