我在中创建了用于突出显示语法的简单代码EditText。首先,我创建了一个HashMap存储关键字和颜色的文件。
Map<String,Integer> map = new HashMap<>();
map.put("public",Color.CYAN);
map.put("void", Color.BLUE);
map.put("String",Color.RED);
Run Code Online (Sandbox Code Playgroud)
然后,我添加了一个TextWatcher为EditText。在afterTextChanged方法中,我使用以下代码为每个关键字设置颜色,
........
@Override
public void afterTextChanged(Editable editable) {
String string = editable.toString();
String[] split = string.split("\\s");
for(int i = 0 ; i < split.length ; i++){
String s = split[i];
if(map.containsKey(s)){
int index = string.indexOf(s);
int color = map.get(s);
editable.setSpan(new ForegroundColorSpan(color),
index,
index + s.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我键入不同的词(例如“ public void String”),则此代码有效,但是当我键入相同的词“ public public public”时,此代码不起作用。它仅将颜色设置为第一个单词。
我该如何工作?谢谢。