小编Mal*_*nda的帖子

使用Span在Android EditText上突出显示语法吗?

我在中创建了用于突出显示语法的简单代码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)

然后,我添加了一个TextWatcherEditText。在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”时,此代码不起作用。它仅将颜色设置为第一个单词。

在此处输入图片说明

我该如何工作?谢谢。

java android syntax-highlighting spannablestring

3
推荐指数
2
解决办法
1946
查看次数