【问题标题】:How do I change color of a certain part of my textview?如何更改文本视图某个部分的颜色?
【发布时间】:2015-10-20 21:03:32
【问题描述】:

我在文本视图中使用 2 个部分,第一个部分是日期,另一个是姓名和电子邮件。 它们都在同一个文本视图中引用。我想更改日期的颜色,使其具有与姓名和电子邮件不同的视觉效果。是否可以在不实际为姓名和电子邮件添加全新的文本视图的情况下做到这一点? 到目前为止,这是我的代码:

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

我怎样才能设置日期的颜色 holder.mytext.setTextColor(Color.white) 和 nameandemail 字符串类似绿色?

谢谢!

【问题讨论】:

  • 您可以使用Html.fromHtmlSpannableString (ForegroundColorSpan)
  • 你能根据我的代码展示它吗?我怎样才能使用这种格式?
  • 我尝试了几个 foregroundcolorspans 和 spannables,但它根本不起作用

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


【解决方案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));

【讨论】:

    【解决方案2】:

    您可以在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)));
    

    【讨论】:

    【解决方案3】:

    我的建议是使用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);
    }
    

    【讨论】:

    • 这是我尝试的第一件事。它因字符串超出限制 30 的错误而崩溃
    • 但是你不应该使用这些数字。您应该适应自己的需要并使用要更改颜色的文本的起始字符位置,替换15并使用String中最后一个字符的位置而不是30。
    • 请检查编辑后的答案。我总结了一个通用的方法供您使用...
    猜你喜欢
    • 2019-04-20
    • 2011-09-03
    • 1970-01-01
    • 2020-02-11
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多