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已经插入了对应的表情图片

原创粉丝点击