2012-10-09 10 views
9
This is :) and want to :) replace with :D new image. 

EditTextbox'dan aldığım bu tür bir dizim var.NOw image1 ve ": D" ile tüm ":)" i değiştirmek istiyorum (": D", image2) .Yani herkes ne kadar küçük kod ile bunu benden önerebilirsiniz ve ayrıca daha iyi performance.I var image2.I string.replaceall (":)", image1) ve string.replaceall gibi yapmak istiyorum Kodu yaz ve iyi çalışıyor ama çok zaman alıyor.Karakterleri Görüntü dizisi ile değiştirin ve sonra da Textview olarak ayarlayın

textview.setText(getSmiledText(ctx, stringvalue)); 
private static final HashMap<String, Integer> emoticons = new HashMap<String, Integer>(); 
    static { 
     emoticons.put(":)", R.drawable.j1); 
     emoticons.put(":D", R.drawable.j2);} 

public static Spannable getSmiledText(Context context, String s) { 
     int index; 
     SpannableStringBuilder builder = new SpannableStringBuilder(); 
     builder.append(s); 

     for (index = 0; index < builder.length(); index++) { 
      for (Entry<String, Integer> entry : emoticons.entrySet()) { 
       int length = entry.getKey().length(); 
       if (index + length > builder.length()) 
        continue; 
       if (builder.subSequence(index, index + length).toString() 
         .equals(entry.getKey())) { 
        builder.setSpan(new ImageSpan(context, entry.getValue()), 
          index, index + length, 
          Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
        index += length - 1; 
        break; 
       } 
      } 
     } 
     return builder; 
    } 
+0

'da soru tekrar ne nedenle fine' çalışıyor? – njzk2

+0

i benzer var ... çalışma ama buna setSpan' yavaş parçası olan 'görünüyor – Nency

+0

i daha iyi bir çözüm gerek character.So tarafından karakteri kontrol edecek BCz fazla zaman alabilir performansta artacak daha iyi bir çözüm gerek metnin arkaplan rengini değiştirmeyle ilgili sorun. – bancer

cevap

0

sadece görüntüleri daha önce değil çalışma zamanında, yük görüntülere yüklemek ve değişkenlerde kaydedin ve sadece çalışma zamanında görüntüleri atamak yapmanız gerekenler. FYI karakterleri sorun değil, ben daha önce aynı konuya girdim, ben de bunu dokunma noktaları sorunu olarak anladım, fakat sorun görüntülerin yüklenmesiydi.

+0

Görüntüyü daha önce nasıl yükleyeceğinizi daha ayrıntılı açıklayabilir misiniz? Bu emoticons.put (":)", R.drawable.j1) gibi görüntüleri ayarladım; emoticons.put (": D", R.drawable.j2); şimdi nasıl yapabilirim? – Nency

+0

Bitmap bitmap = BitmapFactory.decodeResource (getResources(), R.drawable.j1); Bit eşlem bitmap1 = BitmapFactory.decodeResource (GetResources(), R.drawable.j2); builder.setSpan (bitmap, dizin, indeks + uzunluk, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Umarım bu yardımcı olur. – jay

+0

YOu ayrıca hashmap'ınıza dize ve bitmap yerleştirebilir. i R.draweable.j1 gibi HashMap görüntüyü ayarladıysanız – jay

0

Kontrol bu:

public static Spannable getSmiledText(Context context, String s) 
    { 
    int index; 
    SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append(s); 

    for (Entry<String, Integer> entry : EmoticonsCode.emoticons_code.entrySet()) 
    { 
     try { 
      int length = entry.getKey().length(); 
      for (index = s.indexOf(entry.getKey()); index >= 0; index = s.indexOf(entry.getKey(), index + 1)) 
      { 
       System.out.println(index); 
       builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      } 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    return builder; 
} 
İlgili konular