首页 > 解决方案 > 使用 SpannableStringBuilder 格式化 EditText 和 TextView

问题描述

我有一个 TextView 显示从 db 检索到的文本,并且文本的某些部分被标记为注释。

这里是样本......

// CREATE A VARIABLE AT THE CLASS LIKE THIS...
private static int delay = 4000; //4Secs

/*NOW THE DELAY METHOD*/
new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        // DECLARE ACTIONS TO BE DELAYED HERE...
    }
}, delay);

现在我希望所有单行和多行注释文本都具有不同的 textColor。我该怎么做?

标签: androidandroid-edittexttextviewspannablestring

解决方案


如果您使用 html 的 font-color 属性格式化字符串,然后将其传递给方法 Html.fromHtml(your text here)

String text = "<font color=#cc0029>First Color</font> <font color=#ffcc00>Second Color</font>";
yourtextview.setText(Html.fromHtml(text));

或者您可以在没有 HTML 的情况下打印具有多种颜色的行:

SpannableStringBuilder builder = new SpannableStringBuilder();

SpannableString str1= new SpannableString("Text1");
str1.setSpan(new ForegroundColorSpan(Color.RED), 0, str1.length(), 0);
builder.append(str1);

SpannableString str2= new SpannableString("Text2");
str2.setSpan(new ForegroundColorSpan(Color.GREEN), 0, str2.length(), 0);
builder.append(str2);

TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText( builder, TextView.BufferType.SPANNABLE);

推荐阅读