1

我在textview中使用2部分,第一部分是日期另一个是名称和电子邮件。 它们都在同一个textview中引用。我想改变日期的颜色,使它与名称和电子邮件不同。是否有可能在没有为名称和电子邮件实际添加全新的文本视图的情况下执行此操作? 这里是我到目前为止的代码:如何更改我的textview的某个部分的颜色?

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

如何让这样我可以设置日期的颜色与 holder.mytext.setTextColor(Color.white)并为nameandemail串像绿色的吗?

谢谢!

+1

您可以用' Html.fromHtml'或者'Spannable字符串'('ForegroundColorSpan') – Blackbelt

+0

你可以显示它与我的代码?我如何使用这种格式? –

+0

我尝试了几个foregroundcolorspans和spannables,它根本没有工作 –

回答

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))); 
+0

真棒工作!谢谢!你也碰巧有一个关于我想知道的其他问题的线索:http://stackoverflow.com/questions/33226491/how-do-i-display-the-calendar-date-on-the-top -of-聊天消息/ 33226608#33226608 –

0

我的建议是使用Spannable

这是一个简短的使用方法,我打包供您使用。您只需传递TextView,全文和单个部分以从全文中重新着色。

可以将此方法放置到utils的类并调用它,只要你想要的,或保持在一个活动或片段(或其他任何地方),如果你在一个类中使用它:

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); 
} 
+0

这是我第一次尝试。它崩溃的错误字符串扩展beloynd限制30 –

+0

但你不应该使用这些数字。你应该适应你自己的需要,并使用你想改变颜色的文字的起始字符位置,替换15并使用字符串中最后一个字符的位置而不是30. – Mike

+0

请检查编辑后的答案。我包了一个广义的方法供你使用... – Mike

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)); 
+0

没有人工作 –