2012-12-13 7 views
8

Sto costruendo una semplice app di chat in cui l'utente ha la possibilità di inviare testo ed emoticon. Posso inviare sia testo che emoticon a un altro telefono. I miei problemi sono:Il testo è incasinato con ImageSpan in EditText

1. Quando digito qualcosa e aggiungere un emoticon:

enter image description here

Poi non riesco a digitare il testo a destra prima e subito dopo l'immagine. Posso scrivere prima della lettera "o". Il sistema "vede" che digito, quindi, anche se digito "Honey", dopo lo smiley, non riesco a vedere, ma l'EditText registra e il messaggio viene inviato:

enter image description here

2.Quando Aggiungo solo un'emoticon all'Edittext, quindi lo cancello., Non riesco a digitare nulla perché appare l'emoticon cancellata. Appare solo una volta, quindi non importa quanti caratteri io digiti, l'EditText sembra appena prima che io abbia cancellato l'emoticon, MA il testo viene inviato senza emoticon, proprio come in tutti e tre i casi.

3.Quando ho digitare "qualcosa" nel EditText quindi inserire un emoticon dopo "qualche":

enter image description here

poi ho messo il cursore dopo l'emoticon ed eliminarlo, ecco cosa rimane :

enter image description here

Ma il messaggio corretto viene inviato quando si preme il pulsante di invio:

enter image description here

Questo è quello che c'è dentro il pulsante ascoltatore del emoticon (questo metodo viene attivato quando clicco sul emoticon per aggiungere al 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

dove è possibile risolvere il problema? – noxius

+1

Sì, io ero come vedi nella risposta accettata – erdomester

risposta

6

Ho trovato la soluzione. Tutto quello che dovevo fare era cambiare Spannable.SPAN_INCLUSIVE_INCLUSIVE in Spannable.SPAN_EXCLUSIVE_EXCLUSIVE

+0

Ho lo stesso problema, ma 'Spannable.SPAN_EXCLUSIVE_EXCLUSIVE' non risolve il problema nel mio dispositivo Jelly Bean. A un Android 2.2 funziona come previsto. Avete qualche informazione a riguardo? – fish

+0

Sfortunatamente non lo faccio e non possiedo un dispositivo Jelly Bean – erdomester

+0

@fish che ho provato in Jelly Bean (emulatore) e non ci sono problemi. – BornToCode

0

vorrei aggiungere un textwatcher a quella EditText e vedere come l'utente, in questo modo posso riposizionare le immagini/impostare il testo/apportare correzioni/convalidare l'input/etc.

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

Quindi quando digito ciao :)/:) è il numero di smiley/txt è 7. Quindi scrivo "Miele", che è invisibile, ma è lì perché il numero di digitato i personaggi sono aumentati a 12. Cosa posso fare su questo? – erdomester

+0

Mi dispiace, sono in modalità breadcrumb su questo. Forse qualcosa sotto afterTextChanged .... if (s.contains (":)")) e poi sotto onTextChanged usa start, before e count per ricostruire l'output del testo determinando dove sono i ":)" e usando editText.getText & editText.setText. – logray

Problemi correlati