一般的解決方案是,形如:
character=/:)
file=2.gif
這樣的設定檔。
那麼可以把圖片和Emoji的對應關係儲存在一個有序的LinkedHashMap中去。
用SpannableString來處理這種字串
//解析訊息內容SpannableString icontent = new SpannableString(content);
處理icontent的代碼如下:
public SpannableString parseContent(SpannableString icontent, String content) throws Exception{ HashMap<String, String> map = BootApp.getImageMap(); String str[] = content.split("/"); String key = null; String newKey = null; int length = 0; for (int i = 0; i < str.length; i++){ key = str[i]; int keyLength = 0; if(!StringUtils.isEmpty(key)){ keyLength = key.length(); } if (1 == keyLength){ if (map.containsKey(key)) { newKey = key; } } else{ if(!StringUtils.isEmpty(key)){ for (int j = 1; j < key.length() + 1; j++) { String s = ("/" + key.substring(0, j)).toString(); if (map.containsKey(s)) { newKey = key.substring(0, j); break; } }}} if (newKey != null){ String imageId = BootApp.getImageMap().get("/" + newKey); Field field = R.drawable.class.getDeclaredField(imageId); int resourceId = Integer.parseInt(field.get(null).toString()); Bitmap bitmap = BitmapFactory.decodeResource(Global.getContext().getResources(), resourceId); ImageSpan imageSpan = new ImageSpan(Global.getContext(), bitmap); icontent.setSpan(imageSpan, length, newKey.length()+length+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); length+=keyLength+1; } else{ length+=keyLength; }} return icontent;}
返回一個已經把字串和圖片夾雜在一起的SpannableString字串setText給一個用於顯示的TextView