2

我想更改某些关键字的字体颜色。我想要实现的类似于编程环境的文本编辑器,其中某些关键字以不同的颜色显示。

例如红色的“printf”,绿色的“scanf”,深蓝色的括号等。

请注意,我将作为额外的意图接收字符串。即,它不是一个固定的句子......字符串可以包含任意数量的任意组合的单词。

我想要做的就是改变某些单词的字体颜色

4

2 回答 2

1

遍历 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

于 2013-06-30T18:08:59.513 回答
0

我得到了我正在寻找的答案:

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”保留为黑色。

于 2013-07-01T16:32:23.340 回答