更改TextView中一个单词的文本颜色
我正在寻找一种方法来改变从一个Activity
内的TextView
单个文字的颜色。
例如,用这个:
String first = "This word is "; String next = "red" TextView t = (TextView) findViewById(R.id.textbox); t.setText(first + next);
我如何将next
文字的颜色改为红色?
我知道的最简单的方法就是使用html。
String first = "This word is "; String next = "<font color='#EE0000'>red</font>"; t.setText(Html.fromHtml(first + next));
但是这将需要你重buildTextView(如果?)你想改变颜色,这可能会导致麻烦。
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);
你必须使用spannable这也可以让你增加一些文本的大小,使其粗体等….甚至放在一些形象。
像这样使用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);
如果你想改变TextView
文本中一个特定String
的所有实例的状态(不区分大小写),你可以像这样使用StringBuilder
和SpannableString
:
StringBuilder textBuilder = new StringBuilder(myTextView.getText().toString()); StringBuilder searchedTextBuilder = new StringBuilder((mySearchedString)); SpannableString spannableString = new SpannableString(myTextView.getText().toString()); int counter = 0; int index = 0; for (int i = 0;i < textBuilder.length() - mySearchedString.length() - 1;i++) { counter = 0; if (Character.toLowerCase(textBuilder.charAt(i)) == Character.toLowerCase(searchedTextBuilder.charAt(index))) { counter++; index++; for (int j = 1,z = i + 1;j < mySearchedString.length() - 1;j++,z++) { if (Character.toLowerCase(textBuilder .charAt(z)) == Character.toLowerCase(searchedTextBuilder .charAt(index))) { counter++; index++; } else { index++; if (index % mySearchedString.length() == 0) { index = 0; } break; } } if (counter == mySearchedString.length() - 1) // A match { spannableString.setSpan(new ForegroundColorSpan(Color.RED), i, i + mySearchedString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // Do the change you want(In this case changing the fore ground color to red) index = 0; continue; } else { index = 0; continue; } } } myTextView.setText(spannableString);
}
- 将整个
TextView
文本存储在一个StringBuilder
。 - 将search到的string存储在
StringBuilder
。 - 在一个
SpannableString
存储wholreTextView
文本 - 做一个简单的操作来查找
TextView
文本中的所有String
实例,并在到达时更改它们。 - 将
TextView
的文本值设置为SpannableString
。