2013-10-03 247 views
0

的效果我想在字符串「confirm_msg」加量無法獲得SpannableString

final int colorGreen = getResources().getColor(R.color.green_dark); 
    SpannableString spannable = new SpannableString("$" +amount); 
    spannable.setSpan(new ForegroundColorSpan(colorGreen), 0, ("$" + amount).length(), 0); 
    txtConfirmMSG.setText(getString(R.string.confirm_msg, spannable)); 

這是字符串中的xml:

<string name="confirm_msg">PLEASE CONFIRM THAT YOU WISH TO SEND A %1$s </string> 
+0

我們無法理解預期的效果。我猜你需要顯示「請確認你希望發送一個XXXXXX」作爲sp​​annable字符串,但似乎你做錯了。也許你應該在txtConfirmMsg.setText之前調用spannable.setText? –

+0

我想XXXXXX與R.color.green_dark –

回答

2
// try this way 

<string name="confirm_msg">PLEASE CONFIRM THAT YOU WISH TO SEND A %1$d$ </string> 

int amount = 150000; 
     txtConfirmMSG.setText(setSpanColor(String.format(getString(R.string.confirm_msg),amount),String.valueOf(amount))); 

private SpannableStringBuilder setSpanColor(
      final String str,final String text) { 
     SpannableStringBuilder ssb = new SpannableStringBuilder(str); 

     if (str.contains(text)) { 
      ssb.setSpan(new ClickableSpan() { 
       @Override 
       public void onClick(View view) { 
       } 

       @Override 
       public void updateDrawState(TextPaint ds) { 
        ds.setColor(getResources().getColor(R.color.green_dark)); 
       } 
      }, str.indexOf(text), str.indexOf(text) 
        + text.length(), 0); 
     } 
     return ssb; 

    } 
0

這是最好使用HTML在Spannable實現不同的顏色。

您可以檢查這個問題的答案:Highlighting Text Color using Html.fromHtml() in Android?

+0

不不不,其尼特最佳的解決方案,首先你必須建立有效的HTML(這可能是因爲特殊字符,例如有時難「<>」等),釹然後Html.fromHtml必須使用Spanned進行解析並跨越任何方向,爲什麼不直接執行? – pskink

+0

這不是最優雅的,我同意,但它的作品。 – Szymon

+0

所以它的優雅服務兩次? Html.fromHtml應該在我看來只有當你已經有HTML採取,例如從外部來源使用。 grep的源代碼setSpan和fromHtml,你會看到他們使用什麼 – pskink