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

我有這種類型的字符串是我從EditTextbox.NOw得到了我想要全部替換「:)」和「:d」與image2.I想要做像string.replaceall(「:)」,image1)和string.replaceall(「:D」,image2)。所以任何人都可以建議我如何做到這一點與小代碼和更好的performance.I寫代碼,它工作也很好,但它需要很多時間。替換的字符,然後設置爲TextView的

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

'這是工作也fine'所以究竟是什麼問題又來? – njzk2

+0

我需要更好的解決方案,這將提高性能。這是工作,但需要很多時間bcz它會檢查字符的性格。所以我需要更好的解決方案 – Nency

+0

似乎'setSpan'是最慢的部分...我有類似的與替換文字的背景顏色有關的問題。 – bancer

回答

0

你需要做的是隻是在運行時加載圖像,加載圖像並保存在變量中,並在運行時分配圖像。僅供參考的字符不是問題,我早先通過同樣的問題來了解它作爲觸點問題,但問題在於加載圖像。

+0

你能解釋一下如何在previosly加載圖片嗎?我已經設置了像這樣的圖像emoticons.put(「:)」,R.drawable.j1); emoticons.put(「:D」,R.drawable.j2);所以現在我該怎麼辦? – Nency

+0

位圖位圖= BitmapFactory.decodeResource(getResources(),R.drawable.j1); 位圖bitmap1 = BitmapFactory.decodeResource(getResources(),R.drawable.j2); builder.setSpan(bitmap,index,index + length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 我希望這有助於。 – jay

+0

你還可以將字符串和位圖放入你的hashmap中。 – jay

0

檢查:

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; 
} 
相關問題