2012-12-13 14 views
8

verwirrt Ich baue eine einfache Chat-App, wo der Benutzer die Möglichkeit hat, Text und Emoticons zu senden. Ich kann sowohl Text als auch Emoticons an ein anderes Telefon senden. Meine Probleme sind:Text ist mit ImageSpan in EditText

1. Wenn ich etwas geben, und fügen Sie ein Emoticon:

enter image description here

Dann kann ich geben keinen Text direkt vor und direkt nach dem Bild. Ich kann vor dem "o" schreiben. Das System „sieht“, dass ich schreibe, also auch wenn ich „Honey“ nach dem Smiley-Typ, ich kann es nicht sehen, aber die EditText registriert sie und die Nachricht wird gesendet:

enter image description here

2.When Ich füge nur ein Emoticon zum Edittext hinzu, dann lösche ich es, ich kann nichts tippen, weil das gelöschte Emoticon erscheint. Es erscheint nur einmal, egal wie viele Zeichen ich eintippe, der EditText sieht aus wie kurz bevor ich das Emoticon gelöscht habe, ABER der Text wird ohne das Emoticon gesendet, wie in allen drei Fällen.

3.When ich "etwas" in der EditText geben Sie dann ein Emoticon nach "einigen" einfügen:

enter image description here

Dann legte ich den Cursor nach dem Emoticon und löschen Sie es, hier was übrig bleibt :

enter image description here

Aber die richtige Nachricht gesendet wird, wenn ich auf die Schaltfläche Senden drücken:

enter image description here

Das ist, was in der Schaltfläche Hörer des Emoticon ist (diese Methode wird aktiviert, wenn ich das Emoticon klicken sie auf die EditText hinzufügen).

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

zu ändern, wo Sie es beheben können? – noxius

+1

Ja ich war wie du in der angenommenen Antwort siehst – erdomester

Antwort

6

Ich fand die Lösung. Alles, was ich tun musste, war, Spannable.SPAN_INCLUSIVE_INCLUSIVE zu Spannable.SPAN_EXCLUSIVE_EXCLUSIVE

+0

Ich habe das gleiche Problem, aber 'Spannable.SPAN_EXCLUSIVE_EXCLUSIVE' löst das Problem an meinem Jelly Bean Gerät nicht. Bei einem Android 2.2 funktioniert es wie erwartet. Haben Sie Informationen darüber? – fish

+0

Leider habe ich nicht und ich habe kein Jelly Bean Gerät – erdomester

+0

@fish Ich habe in Jelly Bean (Emulator) getestet und es gibt kein Problem. – BornToCode

0

würde ich eine textwatcher zu diesem EditText hinzufügen und zusehen, wie der Benutzer tippt, dass die Art, wie ich die Bilder neu positionieren/stellen Sie den Text/Korrekturen/Validierung Eingabe/etc.

+0

Also wenn ich Hallo gebe :)/:) ist der Smiley/Txt Count 7. Dann tippe ich "Honey", was unsichtbar ist, aber es ist da da die Anzahl der eingegeben Charaktere sind auf 12 gestiegen. Was kann ich dagegen tun? – erdomester

+0

Entschuldigung, ich bin im Breadcrumb-Modus auf diesem. Vielleicht etwas unter afterTextChanged .... if (s.contains (":)")) und dann unter onTextChanged benutze den start, before, und count um die Textausgabe zu rekonstruieren indem du feststellst wo die ":)" stehen und verwenden editText.getText & editText.setText. – logray

Verwandte Themen