我想更改某些关键字的字体颜色。我想要实现的类似于编程环境的文本编辑器,其中某些关键字以不同的颜色显示。
例如红色的“printf”,绿色的“scanf”,深蓝色的括号等。
请注意,我将作为额外的意图接收字符串。即,它不是一个固定的句子......字符串可以包含任意数量的任意组合的单词。
我想要做的就是改变某些单词的字体颜色
遍历 aSpannable
以查找要着色的单词通常是indexOf()
on 或类似方法的问题TextUtils
。
着色词是应用ForegroundColorSpan
.
此示例项目演示了这一点,尽管使用BackgroundColorSpan
. 关键方法是:
private void searchFor(String text) {
TextView prose=(TextView)findViewById(R.id.prose);
Spannable raw=new SpannableString(prose.getText());
BackgroundColorSpan[] spans=raw.getSpans(0,
raw.length(),
BackgroundColorSpan.class);
for (BackgroundColorSpan span : spans) {
raw.removeSpan(span);
}
int index=TextUtils.indexOf(raw, text);
while (index >= 0) {
raw.setSpan(new BackgroundColorSpan(0xFF8B008B), index, index
+ text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
index=TextUtils.indexOf(raw, text, index + text.length());
}
prose.setText(raw);
}
在这里,给定一个TextView
包含要着色的所需文本的 a 的存在,并给定一个要搜索的字符串 ( text
),我们删除所有现有的BackgroundColorSpans
,然后找到所有出现的搜索词并应用 new BackgroundColorSpans
。
我得到了我正在寻找的答案:
public class MainActivity extends Activity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.textView1);
String x="Hello My Name is Umang Mathur";
tv.setText(x);
String [] keywordspurple={"Umang","Mathur","Hello"};
for(String y:keywordspurple)
{
fontcolor(y,0xFF8B008B);
}
String [] keywordsgreen={"Name","is"};
for(String y:keywordsgreen)
{
fontcolor(y,0xffff0000);
}
}
private void fontcolor(String text,int color) {
TextView prose=(TextView)findViewById(R.id.textView1);
Spannable raw=new SpannableString(prose.getText());
int index=TextUtils.indexOf(raw, text);
while (index >= 0) {
raw.setSpan(new ForegroundColorSpan(color), index, index
+ text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
index=TextUtils.indexOf(raw, text, index + text.length());
}
prose.setText(raw);
}
此代码导致将 3 个单词设置为 puple,2 个设置为绿色,而单词“My”保留为黑色。