我正在寻找一种方法来更改Activity
中TextView
中单个单词的文本的颜色。更改TextView中一个单词的文本颜色
例如,对于这样的:
String first = "This word is ";
String next = "red"
TextView t = (TextView) findViewById(R.id.textbox);
t.setText(first + next);
我将如何改变next
文字为红色的颜色吗?
我正在寻找一种方法来更改Activity
中TextView
中单个单词的文本的颜色。更改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));
但是,这将需要你重建TextView时(如果?)你想改变颜色,这可能会导致麻烦。
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这也可以让你增加一些文本的大小,使它粗体等....甚至放在一些图像。
如果你想改变一个特定String
的所有实例的状态TextView
文本(不区分大小写)里面,你可以使用StringBuilder
S和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
之内。StringBuilder
中。SpannableString
TextView
文本做一个简单的操作来发现所有的String
实例TextView
文本内到达时改变它们。TextView
的文本值设置为SpannableString
。使用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);
有什么我可以取代'新的ForegroundColorSpan(颜色)'使文本保留其原始的默认颜色? – cjnash
的[?是否有可能有一个TextView内的多个款式]可能的复制(http://stackoverflow.com/questions/1529068/is-it-可能具有多种样式的文本视图) – blahdiblah
http://stackoverflow.com/questions/9754076/which-html-tags-are-supported-by-android-textview/35271588#35271588 –