android textview和edittext中插入表情
来源:互联网 发布:经济数据日历 编辑:程序博客网 时间:2024/05/31 13:16
关键是下面几步1、在res/values/下创建arrays.xml添加下面定义表情的array,[XX]和[YY]就代表表情字段,可以自己定义,这就是到时候发表表情时真正的东西(代表对应的表情图片)。[html] view plaincopy<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string-array name="smiley_array"> <item>[XX]</item> //有几种表情就写几个item...... <item>[YY]</item> </string-array> </resources> 2、将自己要用的表情图片放入res/drawable/下3、将下面工具类拷入自己的工程里,还需要进行稍微修改[java] view plaincopyimport android.content.Context; import android.graphics.drawable.Drawable; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.style.ImageSpan; import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; public class SmileyParser { private static SmileyParser sInstance; public static SmileyParser getInstance() { return sInstance; } public static void init(Context context) { sInstance = new SmileyParser(context); } private final Context mContext; private final String[] mSmileyTexts; private final Pattern mPattern; private final HashMap<String, Integer> mSmileyToRes; private SmileyParser(Context context) { mContext = context; mSmileyTexts = mContext.getResources().getStringArray( DEFAULT_SMILEY_TEXTS); mSmileyToRes = buildSmileyToRes(); mPattern = buildPattern(); } static class Smileys { // 表情图片集合 private static final int[] sIconIds = { R.drawable.image0, R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4}; // 将图片映射为 文字 public static int dk = 0; public static int dx = 1; public static int hx = 2; public static int hy = 3; public static int jy = 4; // 得到图片表情 根据id public static int getSmileyResource(int which) { return sIconIds[which]; } } public static final int[] DEFAULT_SMILEY_RES_IDS = { Smileys.getSmileyResource(Smileys.dk), // 0 Smileys.getSmileyResource(Smileys.dx), // 1 Smileys.getSmileyResource(Smileys.hx), // 2 Smileys.getSmileyResource(Smileys.hy), // 3 Smileys.getSmileyResource(Smileys.jy), // 4 }; public static final int DEFAULT_SMILEY_TEXTS = R.array.smiley_array; private HashMap<String, Integer> buildSmileyToRes() { if (DEFAULT_SMILEY_RES_IDS.length != mSmileyTexts.length) { throw new IllegalStateException("Smiley resource ID/text mismatch"); } HashMap<String, Integer> smileyToRes = new HashMap<String, Integer>( mSmileyTexts.length); for (int i = 0; i < mSmileyTexts.length; i++) { smileyToRes.put(mSmileyTexts[i], DEFAULT_SMILEY_RES_IDS[i]); } return smileyToRes; } // 构建正则表达式 private Pattern buildPattern() { StringBuilder patternString = new StringBuilder(mSmileyTexts.length * 3); patternString.append('('); for (String s : mSmileyTexts) { patternString.append(Pattern.quote(s)); patternString.append('|'); } patternString.replace(patternString.length() - 1, patternString .length(), ")"); return Pattern.compile(patternString.toString()); } // 根据文本替换成图片 public CharSequence strToSmiley(CharSequence text) { SpannableStringBuilder builder = new SpannableStringBuilder(text); Matcher matcher = mPattern.matcher(text); while (matcher.find()) { int resId = mSmileyToRes.get(matcher.group()); Drawable drawable = mContext.getResources().getDrawable(resId); drawable.setBounds(0, 0, 25, 25);//这里设置图片的大小 ImageSpan imageSpan = new ImageSpan(drawable, ImageSpan.ALIGN_BOTTOM); builder.setSpan(imageSpan, matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return builder; } } 4、最后就是怎么使用了 (1)初始化[java] view plaincopySmileyParser.init(this); smileyParser = SmileyParser.getInstance();//进行初始化 (2)最后的使用[java] view plaincopy//faceStr代表表情字段,例如[XX] String newContent = myEditText.getText().toString() + faceStr; CharSequence replace = smileyParser.strToSmiley(newContent); myEditText.setText(replace); myEditText.setSelection(replace.length()); 5、这样就可以看到自己的myEditText已经插入了对应的表情图片