首先在/res/drawable/目录里放一些图片,命名诸如:face1.png,face2.png,...,face10.png,...
关键代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
public class MainActivity extends Activity { /** 文本编辑框,在其中显示图片表情 **/ private EditText mEditText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText) findViewById(R.id.et); findViewById(R.id.add).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { // 获取光标的位置。 int start = mEditText.getSelectionStart(); // 随意的图片id int randomID = 1 + new Random().nextInt(24); // 提取一个Drawable对象的属性。表情图片文件名即R类的属性名 Field field = R.drawable.class.getDeclaredField("face" + randomID); // 得到图片ID。即R中属性值 int resouseId = Integer.parseInt(field.get(null).toString()); // 加载图片 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resouseId); // 用ImageSpan指定图片替代文字 ImageSpan span = new ImageSpan(bitmap); // 块文本 SpannableString ss = new SpannableString("[12]"); // 修改块文本内容为图片 ss.setSpan(span, 0, 4, SpannableString.SPAN_INCLUSIVE_EXCLUSIVE); // 追加到EditView中。从光标位置插入 if(mEditText.getText().toString().length() - start >= 4){ mEditText.getText().insert(start, ss); } else { mEditText.append(ss); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }); findViewById(R.id.del).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取光标的位置。如果在最末,则同字符串长度 int start = mEditText.getSelectionStart(); // 光标之前至少有一个字符。尽管显示的是图片,其实内容仍是字符 if (start > 0) { String body = mEditText.getText().toString(); // 包括起始位置,不包括结束位置 String substring = body.substring(0, start); // 预提取光标前最后一个表情的位置 int i = substring.lastIndexOf("["); // 提取到了 if (i != -1) { // 从预提取位置到光标直接的字符 CharSequence cs = substring.subSequence(i, start); // 是不是表情占位符 if (cs.equals("[12]")) { // 是,就删除完整占位符 mEditText.getEditableText().delete(i, start); return; } } // 不是表情,就一般删除 mEditText.getEditableText().delete(substring.length() - 1, start); } } }); } } |
声明
本文由崔维友 威格灵 cuiweiyou vigiles cuiweiyou 原创,转载请注明出处:http://www.gaohaiyan.com/1739.html
承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设