2013-06-01 78 views
0

我有一個聊天應用程序,我想用表情符號來擴展。將drawable轉換爲特定字符串

這個代碼用在文本中插入一個表情符號:

Spanned cs = Html.fromHtml("<img src ='"+ index +"'/>", imageGetter, null);  

    int cursorPosition = content.getSelectionStart();   
    content.getText().insert(cursorPosition, cs); 

這是偉大的工作。表情符號顯示在正確的地方。

現在我想通過HTTP將文本發送到我的服務器。 我想存儲「:)」而不是圖像,而使用較舊的應用程序版本則無法顯示圖像。在新版本中,我在顯示文本之前將「:)」轉換爲圖像。有什麼辦法將圖像轉換爲特定的字符串?

如果要更換你的表情
+0

是表情符號可繪製的資源? R.drawable.something? – Blackbelt

+0

我有他們在資產和可繪製的文件夾。所以是的! – tobias

+0

保留一個HashMap ,其中關鍵字是與您的表情符號 – Blackbelt

回答

1

試試這個:

EditText et = new EditText(this); 
et.setTextSize(24); 
et.setHint("this view shows \":)\" as an emoticon, try to type \":)\" somewhere"); 
final Bitmap smile = BitmapFactory.decodeResource(getResources(), R.drawable.emo_im_happy); 
final Pattern pattern = Pattern.compile(":\\)"); 
TextWatcher watcher = new TextWatcher() { 
boolean fastReplace = true; 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     //Log.d(TAG, "onTextChanged " + start + " " + before + " " + count); 
     if (fastReplace) { 
      if (start > 0 && count > 0) { 
       String sub = s.subSequence(start - 1, start + 1).toString(); 
       if (sub.equals(":)")) { 
        Spannable spannable = (Spannable) s; 
        ImageSpan smileSpan = new ImageSpan(smile); 
        spannable.setSpan(smileSpan, start-1, start+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       } 
      } 
     } else { 
      Spannable spannable = (Spannable) s; 
      Matcher matcher = pattern.matcher(s); 
      while (matcher.find()) { 
       int mstart = matcher.start(); 
       int mend = matcher.end(); 
       ImageSpan[] spans = spannable.getSpans(mstart, mend, ImageSpan.class); 
       Log.d(TAG, "onTextChanged " + mstart + " " + mend + " " + spans.length); 
       if (spans.length == 0) { 
        ImageSpan smileSpan = new ImageSpan(smile); 
        spannable.setSpan(smileSpan, mstart, mend, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       } 
      } 
     } 
     Log.d(TAG, "onTextChanged " + s); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     Log.d(TAG, "afterTextChanged " + s); 
    } 
}; 
et.addTextChangedListener(watcher); 

setContentView(et); 

這裏如果fastReplace == true你不必掃描整個文本,但它只是最小的實現:只有當你鍵入的作品「)」右後鍵入「:」,如果fastReplace == false它用笑臉替換「:)」的每一個出現,但它必須掃描整個文本,所以當文本很大時它會慢一點