如何更改文本视图特定部分的颜色?
How do I change color of a certain part of my textview?
我在文本视图中使用了两部分,第一部分是日期,另一部分是姓名和电子邮件。
它们都在同一个文本视图中被引用。我想更改日期的颜色,使其具有与姓名和电子邮件不同的视觉效果。是否可以在不实际为名称和电子邮件添加全新的文本视图的情况下执行此操作?
到目前为止,这是我的代码:
String nameandemail;
holder.mytext.setText(String.valueOf(dateFormat.format(new Date(msg.getDate())) + " " + nameandemail + ": "));
如何设置日期颜色
holder.mytext.setTextColor(Color.white)
nameandemail 字符串类似于 green?
谢谢!
我的建议是使用 Spannable
。
这是我总结的一个简短的 utils 方法供您使用。您只需要传递您的 TextView、您的全文和要从全文重新着色的单个部分。
您可以将此方法放入 Utils class 并在需要时随时调用它,或者如果您在单个 Activity 或 Fragment(或其他任何地方)中使用它,则将其保存在单个class:
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);
}
您可以使用 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));
您可以在 strings.xml
文件中定义一个字符串
<string name="test2"><font color=\'#FFFFFF\'>%1$s</font> -- <font color=\'#00FF00\'>%2$s</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)));
我在文本视图中使用了两部分,第一部分是日期,另一部分是姓名和电子邮件。 它们都在同一个文本视图中被引用。我想更改日期的颜色,使其具有与姓名和电子邮件不同的视觉效果。是否可以在不实际为名称和电子邮件添加全新的文本视图的情况下执行此操作? 到目前为止,这是我的代码:
String nameandemail;
holder.mytext.setText(String.valueOf(dateFormat.format(new Date(msg.getDate())) + " " + nameandemail + ": "));
如何设置日期颜色
holder.mytext.setTextColor(Color.white)
nameandemail 字符串类似于 green?
谢谢!
我的建议是使用 Spannable
。
这是我总结的一个简短的 utils 方法供您使用。您只需要传递您的 TextView、您的全文和要从全文重新着色的单个部分。
您可以将此方法放入 Utils class 并在需要时随时调用它,或者如果您在单个 Activity 或 Fragment(或其他任何地方)中使用它,则将其保存在单个class:
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);
}
您可以使用 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));
您可以在 strings.xml
文件中定义一个字符串
<string name="test2"><font color=\'#FFFFFF\'>%1$s</font> -- <font color=\'#00FF00\'>%2$s</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)));