2017-08-13 4 views
9

Lasst uns sagen, dass ich ein Kommentar wie diese machen: Hallo Andrea check this out ..... In diesem Kommentar Ich möchte Andrea markieren, aber wenn ich das ändern Wert von Andrea oder wenn ich ein Zeichen des Wortes der Spanne Änderungen löschen, ist das Problem, dass ich ist spannableString.setSpan(new StyleSpan(Typeface.BOLD), indexOfAt, highlightName.length() + indexOfAt, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) mit, was Spanned.SPAN_EXCLUSIVE_EXCLUSIVE Worte in der Mitte und löschen von Worten akzeptiert, wie ich die Spanne entfernen kann, wenn der Benutzer das Wort ändert oder löschen Sie ein Zeichen des Wortes?Entfernen Spanne, wenn der Text innerhalb der Spanne in Android geändert wird

+0

Eine Geige oder Code wird hilfreich sein, diese zu beantworten. – Shuddh

Antwort

1

Sie müssen auf Textänderung auf dem Text bearbeiten. die EditText Angenommen, Sie verwenden als commentEditText genannt

commentEditText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

      } 

      @Override 
      public void afterTextChanged(Editable editable) { 
       String comment = editable.toString(); 
       if (comment.indexOf('@') != -1) { 
        //Asumming the name string 
        String name = "Andrea"; 
        int atIndex = comment.indexOf('@'); 
        int endIndex = atIndex + name.length() + 1; 
        if (endIndex == -1 || endIndex > editable.length()) { 
         endIndex = editable.length(); 
        } 
        if (comment.toLowerCase().contains(name.toLowerCase())) { 
         editable.setSpan(new StyleSpan(Typeface.BOLD), atIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
        } else { 
         StyleSpan[] spannable = editable.getSpans(atIndex, endIndex, StyleSpan.class); 
         if (spannable != null && spannable.length > 0) { 
          for (int i = 0; i < spannable.length; i++) { 
           editable.removeSpan(spannable[i]); 
          } 
         } 

        } 
       } 
      } 
     }); 
0

Sie können TextWatcher versuchen, für diese, einfach TextWatcher auf die Textview Sie oben erreichen wollen hinzufügen und in auf

@Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
//Do some magic here 
    } 

Nun, wenn Benutzertypen oder löscht alle Zeichen Sie einen Rückruf bei diesem Verfahren erhalten wird nach dem Empfangen dass du deine Spannweite zurücksetzen kannst.

+0

erklärte die Grundidee war, einen Rückruf für Textänderung zu bekommen, die hier erreicht wird. –

0

Wenn Sie die SpannableString Sie verwenden haben die ganze Sache bei jeder Änderung neu zu erstellen.

Sie können Spannweiten entfernen, aber man kann nicht die Quelle ändern (Kommentar), weil SpannableString Quelltext unveränderlich ist.

Ich schlage vor, bei jeder Änderung des Kommentars erstellen Sie die , suchen Sie nach Namen und markieren Sie sie, dann, wenn der Kommentar ändert, wiederholen Sie die gleiche Sache mit einem neuen . Es wird keine Leistungsprobleme geben, da die Kommentare klein sind.

Wenn Sie ein veränderbares Objekt haben möchten, können Sie das SpannableStringBuilder verwenden, aber es ist komplizierter und es gibt keine Notwendigkeit dafür.

+0

Ich kann mehr helfen, wenn Sie etwas Code freigeben – MaanooAk

Verwandte Themen