2013-06-22 11 views
10

Ich habe eine Chat-Anwendung, die die Möglichkeit bietet, Emoticons zum Text hinzuzufügen.Entferne ganze Spannbare mit Rücktaste

Ich habe ein Problem mit dem EditText Feld. Die Emoticon-Bilder erscheinen, aber wenn ich auf die normale Tastatur die Rücktaste drücke, erscheint der Text, den ich in ein Emoticons-Bild geändert habe, und ich muss mehrere Zeichen entfernen, bis das Bild verschwindet. Ich benutze Spannable um dies zu tun.

Ich möchte das ganze Smilie weggehen, wenn der Benutzer einmal Backspace drückt.

Hier ist der Code Ich verwende:

// 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

Aus der Hand, Unterklasse 'EditText', überschreiben Sie die Schlüsselverwaltungsmethoden und fügen Sie Ihre eigene Backspace-on-Emoticon-Logik hinzu, die an die Oberklasse für alle anderen Szenarien gekoppelt wird. – CommonsWare

+0

siehe diese http://stackoverflow.com/questions/16876871/convert-drawable-to-a-specific-string/16881037#16881037 – pskink

+0

Hallo Tobias. Ich stehe vor demselben Problem. Könntest du das lösen? –

Antwort

2

So können Sie die Tastatur nicht zwingen zu tun, dass- die Tastatur im Allgemeinen nicht bei dieser Art von Informationen suchen. Sie können einen TextWatcher in das Bearbeitungsfeld setzen und nachTextChanged überschreiben, um diesen Fall zu erkennen und die zusätzlichen benötigten Zeichen zu löschen. Es wird ein Schmerz sein, aber es ist machbar.

Verwandte Themen