/** * 为Textview添加表情 */ public class ExpressionParser { private Context mContext; private Pattern mPattern; private HashMap<String, Integer> mDrawableMap; public static final int[] EXPRESSION_DRAWABLE = { R.drawable.ic_launcher, R.drawable.search }; public static String mExpressionDesc[] = new String[] { "[梅西]", "[内马尔]" }; public ExpressionParser(Context context) { mContext = context; mDrawableMap = buildSmileyToRes(); mPattern = buildPattern(); } private HashMap<String, Integer> buildSmileyToRes() { if (EXPRESSION_DRAWABLE.length != mExpressionDesc.length) { // 表情的数量需要和数组定义的长度一致! throw new IllegalStateException("ExpressionParser resource ID/text mismatch"); } HashMap<String, Integer> map = new HashMap<String, Integer>(mExpressionDesc.length); for (int i = 0; i < mExpressionDesc.length; i++) { map.put(mExpressionDesc[i], EXPRESSION_DRAWABLE[i]); } return map; } // 构建正则表达式 private Pattern buildPattern() { StringBuilder patternString = new StringBuilder(mExpressionDesc.length * 3); patternString.append('('); for (String s : mExpressionDesc) { patternString.append(Pattern.quote(s)); patternString.append('|'); } patternString.replace(patternString.length() - 1, patternString.length(), ")"); return Pattern.compile(patternString.toString()); } /** * 根据文本替换成图片 * exmp: * textview: * String message="asdf巴萨[梅西][内马尔]饿地方"; * text.setText (parser.replace (message)); * edittext: * edit.setText (parser.replace (edit.getText ()+"[梅西]")); * **/ public CharSequence replace(CharSequence text) { SpannableStringBuilder builder = new SpannableStringBuilder(text); Matcher matcher = mPattern.matcher(text); while (matcher.find()) { int resId = mDrawableMap.get(matcher.group()); builder.setSpan(new ImageSpan(mContext, resId), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return builder; } public CharSequence replace(CharSequence text,int textSize) { SpannableStringBuilder builder = new SpannableStringBuilder(text); Matcher matcher = mPattern.matcher(text); while (matcher.find()) { int resId = mDrawableMap.get(matcher.group()); Drawable drawable = mContext.getResources ().getDrawable(resId); drawable.setBounds(0, 0, textSize, textSize);//这里根据字体大小设置图片的大小 ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM); builder.setSpan(imageSpan, matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return builder; } }
Textview\EditText添加表情
猜你喜欢
转载自blog.csdn.net/a646796992/article/details/49663479
今日推荐
周排行