Android - 有没有办法在显示的字符串的一部分中编辑颜色?

时间:2012-05-19 05:29:50

标签: android

我有一部分代码在一个对象上调用toString,而toString基本上会吐出将在屏幕上显示的字符串。

我想改变字符串一部分的颜色。

我刚试过这样的事情:

        String coloredString =  solutionTopicName + " (" + commentCount +  ")";
        Spannable sb = new SpannableString( coloredString );
        ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(140, 145, 160));
        sb.setSpan(new ForegroundColorSpan(Color.BLUE), solutionTopicName.length(), solutionTopicName.length()+3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        return sb.toString();   

但我仍然看到相同的颜色没有变化。

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,有可能

使用Spannable来做到这一点。

setSpan()将完成这项工作。

Spannable mString = new SpannableString("multi color string ");        

mString.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

更新

String coloredString = " (" + solutionTopicName + commentCount +  ")";
        Spannable sb = new SpannableString( coloredString );
        ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(140, 145, 160));
        sb.setSpan(new ForegroundColorSpan(Color.BLUE), solutionTopicName.length(), solutionTopicName.length()+3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        //textView.setText(sb);
    return sb;

最新:

 String solutionTopicName= "Hello";
 String commentCount= "hi how are you";
 String coloredString =  solutionTopicName+"(" + commentCount +  ")";
 Spannable sb = new SpannableString( coloredString );
 sb.setSpan(new ForegroundColorSpan(Color.BLUE), coloredString.indexOf("("), coloredString.indexOf(")")+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  mTextView.setText(sb);

答案 1 :(得分:1)

I would like to change the color of one part of the string. Is that at all possible?
是的,你可以改变字符串特定部分的颜色。您可以使用SpannableStringBuilder课程。

你可以做这样的事。

SpannableStringBuilder sb = new SpannableStringBuilder("This is your String");
ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(140, 145, 160));
sb.setSpan(fcs, 0, 10, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(sb);  

这里是setpan方法的定义。

setSpan(Object what, int start, int end, int flags)
Mark the specified range of text with the specified object.  

setSpan方法将索引作为参数和Object类的实例。所以任何类的实例都可以作为参数传递,具体取决于您的要求。我们使用ForegroundColorSpan的实例来改变文本的颜色。您可以传递Clickable实例以使字符串的某些部分可单击。