Android:使用TextView.setText()着色部分string?

我正在寻找通过.setText(“”)方法更改TextView视图的文本,同时也着色的一部分文字(或使其粗体,斜体,透明等),而不是其余。 例如:

title.setText("Your big island <b>ADVENTURE!</b>"; 

我知道上面的代码是不正确的,但它有助于说明我想实现什么。 我将如何做到这一点?

使用跨度 。

例:

 final SpannableStringBuilder sb = new SpannableStringBuilder("your text here"); // Span to set text color to some RGB value final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(158, 158, 158)); // Span to make text bold final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); // Set the text color for first 4 characters sb.setSpan(fcs, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make them also bold sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); yourTextView.setText(sb); 
 title.setText(Html.fromHtml("Your big island <b>ADVENTURE!</b>")); 

我希望这可以帮助你(它使用多种语言)。

 <string name="test_string" ><![CDATA[<font color="%1$s"><b>Test/b></font>]]> String</string> 

在你的java代码中,你可以这样做:

 int color = context.getResources().getColor(android.R.color.holo_blue_light); String string = context.getString(R.string.test_string, color); textView.setText(Html.fromHtml(string)); 

这样,只有“testing”部分将被着色(和粗体)。

下面是一个例子,它将查找所有出现的单词(不区分大小写),并将它们着色为红色:

 String notes = "aaa AAA xAaax abc aaA xxx"; SpannableStringBuilder sb = new SpannableStringBuilder(notes); Pattern p = Pattern.compile("aaa", Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(notes); while (m.find()){ //String word = m.group(); //String word1 = notes.substring(m.start(), m.end()); sb.setSpan(new ForegroundColorSpan(Color.rgb(255, 0, 0)), m.start(), m.end(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); } editText.setText(sb); 

您可以使用Spannable来给某些文本的某些部分某些方面。 如果你愿意,我可以查找一个例子。

啊,从这里在stackoverflow 。

 TextView TV = (TextView)findViewById(R.id.mytextview01); Spannable WordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers"); WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); TV.setText(WordtoSpan); 

如果你想使用HTML,你需要使用TextView.setText(Html.fromHtml(String htmlString))

如果你想经常/反复的做,你可以看看我写的一个类( SpannableBuilder ),因为Html.fromHtml()效率不是很高(它使用了一个大的XMLparsing机制)。 这是在这篇博文中描述。

您可以连接两个或更多个Spans。 这种方式更容易使用长度值为dynamic文本着色。

 SpannableStringBuilder span1 = new SpannableStringBuilder("Android"); ForegroundColorSpan color1=new ForegroundColorSpan(getResources().getColor(R.color.colorPrimary)); span1.setSpan(color1, 0, span1.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); SpannableStringBuilder span2 = new SpannableStringBuilder("Love"); ForegroundColorSpan color2=new ForegroundColorSpan(getResources().getColor(R.color.colorSecondary)); span2.setSpan(color2, 0, span2.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); Spanned concatenated=(Spanned) TextUtils.concat(span1," => ",span2); SpannableStringBuilder result = new SpannableStringBuilder(concatenated); TextView tv = (TextView) rootView.findViewById(R.id.my_texview); tv.setText(result, TextView.BufferType.SPANNABLE); 

使用这个代码是有帮助的

 TextView txtTest = (TextView) findViewById(R.id.txtTest); txtTest.setText(Html.fromHtml("This is <font color="#ff4343">Red</font> Color!")); 
  String str1 = "If I forget my promise to "; String penalty = "Eat breakfast every morning,"; String str2 = " then I "; String promise = "lose my favorite toy"; String strb = "<u><b><font color='#081137'>"+ penalty +",</font></b></u>"; String strc = "<u><b><font color='#081137'>"+ promise + "</font></b></u>"; String strd = str1 +strb+ str2 + strc; tv_notification.setText(Html.fromHtml(strd));