2017-08-13 25 views
9

Bunun gibi bir yorum yaptığımı varsayalım: Merhaba Andrea bunu kontrol et ..... Bu yorumda Andrea'yı vurgulamak istiyorum ancak her ne zaman değiştirdiğimi Andrea değeri veya sözcüğün bir karakterini sildiğimde span değiştiğinde sorun, spannableString.setSpan(new StyleSpan(Typeface.BOLD), indexOfAt, highlightName.length() + indexOfAt, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) kullanıyorum, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE kelimelerin ortada ve sözcüklerin silinmesini kabul ediyor, kullanıcı kelimeyi değiştirdiğinde açıklığı nasıl kaldırabilirim veya kelimenin bir karakterini silmek mi?Yayılma alanı içindeki metin değiştirildiğinde Android cihazını değiştirin

+0

bir keman veya kod olarak adlandırılır. – Shuddh

cevap

1

Düzenleme metninde Metin değişikliği izlemeniz gerekir. EditText varsayarsak, kullandığınız bu cevap yararlı olacaktır commentEditText

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

Sen aldıktan sonra bu yöntemde bir geri arama alacak basitçe

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

üzerine Şimdi her kullanıcı türleri yukarıda ulaşmak istediğiniz textview TextWatcher ekleyin ve bunun için TextWatcher deneyin ya da herhangi bir karakteri siler edebilirsiniz yayınınızı sıfırlayabilirsiniz.

+0

, temel düşüncenin, burada elde edilen metin değişikliği için bir geri arama alması olduğunu açıkladı. –

0

SpannableString'u kullanıyorsanız, her şeyi her değişiklikte yeniden oluşturmanız gerekir.

Genişlikleri kaldırabilirsiniz ancak kaynağı (yorum) değiştiremezsiniz, çünkü SpannableString kaynak metin değişmezdir.

SpannableString'u oluşturduğunuz yorumun tüm değişikliklerini öneririm, adları arayın ve onları etiketleyin, ardından yorum değiştiğinde, aynı şeyi yeni bir SpannableString ile tekrarlayın. Performans sorunları olmayacaktır çünkü yorumlar küçüktür.

Değiştirilebilir bir nesneye sahip olmak istiyorsanız, SpannableStringBuilder'u kullanabilirsiniz, ancak daha karmaşıktır ve buna gerek yoktur.

+0

Bazı kodları paylaşırsanız daha fazla yardımcı olabilirim – MaanooAk

İlgili konular