2013-06-22 44 views
10

我有一個聊天應用程序,它提供了向文本添加表情符號的可能性。使用退格刪除整個Spannable

我與EditText字段有問題。表情符號圖像顯示出來,但是如果我按下正常鍵盤上的退格按鈕,我將更改爲表情符號圖片的文本顯示出來,並且必須刪除多個字符,直到圖片消失。我正在使用Spannable來做到這一點。

我想讓整個笑臉消失,如果用戶按下一次退格鍵。

下面的代碼我使用:

// This is in the keyclicked listener 
{ 
    ... 
    smilie = "(angel)"; 
    break; 
    ... 
    int cursorPosition = content.getSelectionStart(); 
    content.getText().insert(cursorPosition, getSmiledText(this, smilie)); 
    content.getText().insert(cursorPosition + smilie.length(), " "); 
} 

public static boolean addSmiles(Context context, Spannable spannable) { 
    boolean hasChanges = false; 
    for (Entry<Pattern, Integer> entry : smilies.entrySet()) { 
     Matcher matcher = entry.getKey().matcher(spannable); 
     while (matcher.find()) { 
      boolean set = true; 
      for (ImageSpan span : spannable.getSpans(matcher.start(), 
        matcher.end(), ImageSpan.class)) 
       if (spannable.getSpanStart(span) >= matcher.start() 
         && spannable.getSpanEnd(span) <= matcher.end()) 
        spannable.removeSpan(span); 
       else { 
        set = false; 
        break; 
       } 
      if (set) { 
       hasChanges = true; 
       spannable.setSpan(new ImageSpan(context, entry.getValue()), 
         matcher.start(), matcher.end(), 
         Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      } 
     } 
    } 
    return hasChanges; 
} 

public static Spannable getSmiledText(Context context, CharSequence text) { 
    Spannable spannable = spannableFactory.newSpannable(text); 
    addSmiles(context, spannable); 
    return spannable; 
} 
+0

關閉Cuff的EditText子類,覆蓋密鑰管理方法,並添加自己的表情符號邏輯,鏈接到所有其他場景的超類。 – CommonsWare

+0

看到這個http://stackoverflow.com/questions/16876871/convert-drawable-to-a-specific-string/16881037#16881037 – pskink

+0

嗨tobias。我面臨同樣的問題。你能解決這個問題嗎? –

回答

2

所以你不能強迫鍵盤做但─鍵盤一般不看這類資訊。你可以做的是在編輯區放置一個TextWatcher,並覆蓋afterTextChanged來檢測這種情況並刪除所需的附加字符。這將是一個痛苦,但它是可行的。