標籤(空格分隔): 未分類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));