2012-12-13 87 views
8

我正在構建一個簡單的聊天應用程序,用戶可以在其中發送文本和圖釋。我可以將文字和表情圖案發送到另一部手機。我的問題是:文本與EditText中的ImageSpan混淆

1.當我輸入一些東西並添加表情符號:

enter image description here

那麼我就不能正確之前,右圖像後鍵入任何文本。我可以在「o」字母前寫字。該系統「看到」我的類型,所以即使我鍵入「親愛的」笑臉後,我還看不出來,但登記的EditText併發送消息:

enter image description here

2.當我只向Edittext添加一個圖釋,然後刪除它,因爲刪除的圖釋出現,我無法輸入任何內容。它只出現一次,所以無論我輸入多少個字符,EditText看起來就像我刪除表情符號之前,但是文本沒有表情符號發送,就像在所有三種情況下一樣。

3.當我鍵入的EditText「東西」,然後「一些」後插入表情:

enter image description here

然後我把光標的表情後,並刪除它,這裏還剩下什麼:

enter image description here

但是,當我按下發送按鈕發送正確的消息:

enter image description here

這就是表情符號的按鈕,監聽器裏有什麼(當我點擊的表情,將其添加到的EditText這種方法被激活)。

ib_happy.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     int cursorPosition = mOutEditText.getSelectionStart(); 
      mOutEditText.getText().insert(cursorPosition, smileys[0]); 
     SpannableStringBuilder ssb = new SpannableStringBuilder(mOutEditText.getText()); 
     ssb.setSpan(new ImageSpan(bitmapArray.get(0), ImageSpan.ALIGN_BASELINE), cursorPosition, cursorPosition+2, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
     mOutEditText.setText(ssb, BufferType.SPANNABLE); 
      mOutEditText.setSelection(cursorPosition+2); 
     dialog_emoticon.dismiss(); 
    } 
}); 
+0

您可以在哪裏修復它? – noxius

+1

是的,我在你接受的答案中看到 – erdomester

回答

6

我找到了解決方案。我所要做的就是將Spannable.SPAN_INCLUSIVE_INCLUSIVE更改爲Spannable.SPAN_EXCLUSIVE_EXCLUSIVE

+0

我有同樣的問題,但'Spannable.SPAN_EXCLUSIVE_EXCLUSIVE'不能解決我的果凍豆設備的問題。在Android 2.2中,它像預期的那樣工作。你有沒有關於這方面的任何信息? – fish

+0

不幸的是,我沒有,我沒有一個果凍豆設備 – erdomester

+0

@fish我已經在Jelly Bean(模擬器)中測試過,並且沒有問題。 – BornToCode

0

我會一個textwatcher添加到EditText上,看着用戶類型,這樣我可以重新定位圖像/設置文本/改正/驗證輸入/等等。

editText.addTextChangedListener(textWatcher); 

textWatcher = new TextWatcher() { 
    public void afterTextChanged(Editable s) { 
     //editText.doStuffHere 
     //reposition your image/etc. 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 
    public void onTextChanged(CharSequence s, int start, int before, int count) { } 
}; 
+0

因此,當我輸入hello :)/:)是笑臉/ txt計數是7.然後我輸入「Honey」,它是隱形的,但它在那裏,因爲輸入的數字角色已增加到12.我能做些什麼呢? – erdomester

+0

對不起,我在這個麪包屑模式。也許是afterTextChanged .... if(s.contains(「:)」)),然後在onTextChanged下使用start,before和count通過確定「:)」的位置來重建文本輸出並使用editText.getText&editText.setText。 – logray