如何更改textview的某个部分的颜色?

时间:2015-10-20 21:03:32

标签: android android-layout textview spannablestring android-textattributes

我在textview中使用2部分,第1部分是日期,另一部分是姓名和电子邮件。 它们都在同一文本视图中引用。我想改变日期的颜色,以便从名称和电子邮件中获得不同的视觉效果。是否可以在不实际为名称和电子邮件添加全新textview的情况下执行此操作? 到目前为止,这是我的代码:

String nameandemail;
holder.mytext.setText(String.valueOf(dateFormat.format(new Date(msg.getDate())) + " " + nameandemail + ": "));

如何制作,以便我可以设置日期的颜色 holder.mytext.setTextColor(Color.white)和nameandemail字符串类似绿色?

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用spans

final SpannableStringBuilder sb = new SpannableStringBuilder("your text here");

// Set text color to some RGB value
final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(158, 158, 158)); 

// Make text bold
final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); 

// Set the text color for first 6 characters
sb.setSpan(fcs, 0, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

// make them also bold
sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

textView.setText(sb);

你也可以使用下面的html

  myTextView.setText(Html.fromHtml(text + "<font color=white>" + some_text + "</font><br><br>"
        + some_text));

答案 1 :(得分:1)

您可以在strings.xml文件中定义一个字符串

 <string name="test2">&lt;font color=\'#FFFFFF\'>%1$s&lt;/font>  -- &lt;font color=\'#00FF00\'>%2$s&lt;/font></string>

然后以编程方式

TextView tv = (TextView) findViewById(R.id.test);
 tv.setText(Html.fromHtml(getString(R.string.test2, String.valueOf(dateFormat.format(new Date(msg.getDate())), nameandemail)));

答案 2 :(得分:0)

我的建议是使用Spannable

这是一个简短的utils方法,我把它包起来供你使用。您只需要传递TextView,全文和单个部分从全文中重新着色。

您可以将此方法放置到Utils类并随时调用它,或者如果您在单个类中使用它,则将其保存在单个Activity或Fragment(或其他任何位置)中:

public static void colorText(TextView view, final String fullText, final String whiteText) {
    if (fullText.length() < whiteText.length()) {
        throw new IllegalArgumentException("'fullText' parameter should be longer than 'whiteText' parameter ");
    }
    int start = fullText.indexOf(whiteText);
    if (start == -1) {
        return;
    }
    int end = start + whiteText.length();

    SpannableStringBuilder finalSpan = new SpannableStringBuilder(fullText);
//    finalSpan.setSpan(new ForegroundColorSpan(ContextCompat.getColor(view.getContext(),R.color.your_own_color_code)), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    finalSpan.setSpan(new ForegroundColorSpan(Color.WHITE), start, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    view.setText(finalSpan);
}