从字符串中更改Android TextView的颜色

3

嘿,我正在创建一个包含从json中获取的数据的Android TextView。

虽然可以正常显示,但我想要更改TextView部分文本颜色,不知道该怎么做。

以下是我的详细信息:

JSONArray jArray= new JSONArray(result);

for(int i=0; i<jArray.length();i++)
{
JSONObject getjson=jArray.getJSONObject(i);

s= "Title: "            +getjson.getString("tender_title")+
   "\n\nTender id: "    +getjson.getString("tender_id")+
   "\n\nReference no:\n"+getjson.getString("tender_reference_no")+
   "\n\nQuantity: "     +getjson.getString("tender_item_details_quantity");

}

TextView txt=(TextView) findViewById(R.id.textView1);
txt.setText(s); 

上述代码很好,它设置了文本视图中所有值,但我想要改变“Title”、“Tender id”、“Quantity”等的颜色,来自上面的字符串s,请帮忙。


该字符串包含什么?黑色、白色还是十六进制颜色值? - Viswanath Lekshmanan
@Arju 谢谢回复。现在这个文本视图已经设置为白色,但我想将其中一部分文本更改为黄色。 - Brett
@Brett 如果你的问题已经解决,作为良好的实践,你应该选择最有帮助的答案。 - Amulya Khare
5个回答

2
您可以将文本设置为HTML:
txt.setText(Html.fromHtml("your <font color='#FF0000'>content</font>");

1

使用spans

示例:

{
   final SpannableStringBuilder sb = new SpannableStringBuilder("your text here");
   final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(158, 158, 158)); 

   // Span to set text color to some RGB value
   final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); 

   // Span to make text bold
   sb.setSpan(fcs, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 

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

   // make them also bold
   yourTextView.setText(sb);
}

1

这里有一个针对您情况的解决方案:

请按照以下方式更新您的代码:

JSONArray jArray= new JSONArray(result);
Spanned spannedStr = null;
for(int i=0; i<jArray.length();i++)
{
    JSONObject getjson = jArray.getJSONObject(i);

    spannedStr = (Spanned) TextUtils.concat(getColorString("Title:"), getjson.getString("tender_title"), "\n\n",
            getColorString("Tender id:"), getjson.getString("tender_title"), "\n\n",
            getColorString("Reference no:"), getjson.getString("tender_title"), "\n\n",
            getColorString("Quantity:"), getjson.getString("tender_title"));

}
TextView txt=(TextView) findViewById(R.id.textView1);
txt.setText(spannedStr);

在同一类中定义一个辅助方法并使用它:
private Spanned getColorString(String str) {
    return Html.fromHtml("<font color='#FFFF00'>" + str + "</font>");
}

示例输出:

enter image description here


0

你也可以使用 Spanned 来实现这个功能。

 Spanned sText=Html.fromHtml("<font color="#C3003">Title:</font> "  );

txt.setText(sText);

0
 Spannable WordtoSpan = new SpannableString(text);

 WordtoSpan.setSpan(new ForegroundColorSpan(Color.WHITE), text.length, (text +      
 nextString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

 myTextView.setText(WordtoSpan);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接