标签(空格分隔): 未分类android
转载自:android edittext插入表情(基于socket方式),并对文中不正确的内容进行整理和修正socket
涉及知识点:oop
ImageGetter imageGetter = new ImageGetter() { public Drawable getDrawable(String source) { int id = Integer.parseInt(source); Drawable d = getResources().getDrawable(id); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); return d; } }; // 咱们先实例化一个ImageGetter,ImageGetter是什么你们本身查查, // 这里能够理解为经过它能够把edittext里面的html标签替换为图片的一个方法 // 而后经过Html.fromHtml把它转换成文本格式 // Emoji.DATA[position]的意思是从表情ID集合(Emoji.DATA)中取得第position个元素 CharSequence cs = Html.fromHtml("<img src='" + Emoji.DATA[position]+ "'/>", imageGetter, null); // 在光标处插入一个表情符 editText.getText().insert(editText.getSelectionStart(), cs); Log.i(TAG, "内容:" + filterHtml(Html.toHtml(editText.getText())));
如今要是你打印出EditText
的text
里面确定有个OBJ
的小图标,咱们发出去后也是显示那个样子,咱们是要经过socket
发出去的,因此咱们不能直接发送editText.getText()
的值,这时候咱们须要用一个方法过滤一下才能发,咱们还须要一个方法 以下:编码
public static String filterHtml(String str) { str = str.replaceAll("<(?!br|img)[^>]+>", "").trim(); return unicodeToGBK2(str); }
这就是把ediTtext
的内容过滤,除了<br>
标签和<img>
标签,其余都去掉后的内容,如今就能够发送啦。注意:有些可能发送后就会出现#&62137;
这样编码的内容(中文),须要再转码一下,转码的方法也给你们贴上 以下:.net
public static String unicodeToGBK2(String s) { String[] k = s.split(";"); String rs = ""; for (int i = 0; i < k.length; i++) { int strIndex = k[i].indexOf("&#"); String newstr = k[i]; if (strIndex > -1) { String kstr = ""; if (strIndex > 0) { kstr = newstr.substring(0, strIndex); rs += kstr; newstr = newstr.substring(strIndex); } int m = Integer.parseInt(newstr.replace("&#", "")); char c = (char) m; rs += c; } else { rs += k[i]; } } return rs; }
ImageGetter imageGetter = new ImageGetter() { public Drawable getDrawable(String source) { int id = Integer.parseInt(source); Drawable d = getResources().getDrawable(id); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); return d; } }; String serverText = ;// serverText 来自服务端返回 editText2.setText(Html.fromHtml(serverText,imageGetter,null));