[关闭]
@wangwangheng 2015-03-28T09:34:29.000000Z 字数 1931 阅读 2456

Android表情功能

未分类


转载自:android edittext插入表情(基于socket方式),并对文中不正确的内容进行整理和修正

涉及知识点:

1、在EditText光标处插入一个表情

  1. ImageGetter imageGetter = new ImageGetter() {
  2. public Drawable getDrawable(String source) {
  3. int id = Integer.parseInt(source);
  4. Drawable d = getResources().getDrawable(id);
  5. d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
  6. return d;
  7. }
  8. };
  9. // 我们先实例化一个ImageGetter,ImageGetter是什么大家自己查查,
  10. // 这里可以理解为通过它可以把edittext里面的html标签替换为图片的一个方法
  11. // 然后通过Html.fromHtml把它转换成文本格式
  12. // Emoji.DATA[position]的意思是从表情ID集合(Emoji.DATA)中取得第position个元素
  13. CharSequence cs = Html.fromHtml("<img src='" + Emoji.DATA[position]+ "'/>", imageGetter, null);
  14. // 在光标处插入一个表情符
  15. editText.getText().insert(editText.getSelectionStart(), cs);
  16. Log.i(TAG, "内容:" + filterHtml(Html.toHtml(editText.getText())));

2、过滤EditText的内容

现在要是你打印出EditTexttext里面肯定有个OBJ的小图标,我们发出去后也是显示那个样子,我们是要通过socket发出去的,所以我们不能直接发送editText.getText()的值,这时候我们需要用一个方法过滤一下才能发,我们还需要一个方法 如下:

  1. public static String filterHtml(String str) {
  2. str = str.replaceAll("<(?!br|img)[^>]+>", "").trim();
  3. return unicodeToGBK2(str);
  4. }

这就是把ediTtext的内容过滤,除了<br>标签和<img>标签,其他都去掉后的内容,现在就可以发送啦。注意:有些可能发送后就会出现#&62137;这样编码的内容(中文),需要再转码一下,转码的方法也给大家贴上 如下:

  1. public static String unicodeToGBK2(String s) {
  2. String[] k = s.split(";");
  3. String rs = "";
  4. for (int i = 0; i < k.length; i++) {
  5. int strIndex = k[i].indexOf("&#");
  6. String newstr = k[i];
  7. if (strIndex > -1) {
  8. String kstr = "";
  9. if (strIndex > 0) {
  10. kstr = newstr.substring(0, strIndex);
  11. rs += kstr;
  12. newstr = newstr.substring(strIndex);
  13. }
  14. int m = Integer.parseInt(newstr.replace("&#", ""));
  15. char c = (char) m;
  16. rs += c;
  17. } else {
  18. rs += k[i];
  19. }
  20. }
  21. return rs;
  22. }

3、显示从服务端返回的带有表情的内容

  1. ImageGetter imageGetter = new ImageGetter() {
  2. public Drawable getDrawable(String source) {
  3. int id = Integer.parseInt(source);
  4. Drawable d = getResources().getDrawable(id);
  5. d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
  6. return d;
  7. }
  8. };
  9. String serverText = ;// serverText 来自服务端返回
  10. editText2.setText(Html.fromHtml(serverText,imageGetter,null));
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注