在TextView中更改一个单词的文本颜色

cer*_*ler 88 string android colors textview

我正在寻找一种方法来改变在一个字的文本的颜色TextView从内Activity.

例如,有了这个:

String first = "This word is ";
String next = "red"
TextView t = (TextView) findViewById(R.id.textbox);
t.setText(first + next);
Run Code Online (Sandbox Code Playgroud)

如何将next文本颜色更改为红色?

Dan*_*Dan 161

我知道最简单的方法就是使用html.

String first = "This word is ";
String next = "<font color='#EE0000'>red</font>";
t.setText(Html.fromHtml(first + next));
Run Code Online (Sandbox Code Playgroud)

但是这需要你在(如果?)想要改变颜色时重建TextView,这可能会引起麻烦.


cod*_*ber 71

t.setText(first + next, BufferType.SPANNABLE);
Spannable s = (Spannable)t.getText();
int start = first.length();
int end = start + next.length();
s.setSpan(new ForegroundColorSpan(0xFFFF0000), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

你必须使用spannable这也可以让你增加一些文字的大小,使其粗体等....甚至放入一些图像.

  • 很好的回答,谢谢.在这种情况下,可以使用"s.length()"代替"start + next.length()":int end = s.length(); (4认同)
  • 如果有人正在寻找 Xamarin.Android 解决方案。您可以使用控件的“TextFormatted”属性分配“SpannableString”对象。 (2认同)
  • 我得到 `java.lang.String cannot be cast to android.text.Spannable` 错误。 (2认同)

Bis*_*kar 30

像这样使用SpannableStringBuilder:

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(appMode.toString());
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);
Run Code Online (Sandbox Code Playgroud)


May*_*m R 5

for long string you can use this:

String help = getString(R.string.help);
help = help.replace("some word", "<font color='#EE0000'>some word</font>");
txtDesc.setText(Html.fromHtml(help));
Run Code Online (Sandbox Code Playgroud)