2013-10-03 128 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