如何为EditText实现一个简单的语法高亮方法?

6

我正在开发一个需要编码的应用程序,我需要让EditText识别用户输入的单词,如果输入的单词是“something”,那么根据是否注册了这个单词的颜色,它将着色。以下是我的要求:当用户输入并敲入“function”时,我希望它能自动高亮显示。同样适用于其他“function”单词,“()”,“ ”和用户输入的其他单词。


3
不要使用==来比较字符串的值,即使在示例中也是如此。请改用equals - Pshemo
== 仅应用于比较引用。若要比较值,请使用 string1.equalsIgnoreCase(string2) 方法。 - Prem
这是否意味着我可以使用“==”来将其与某些值进行比较?如果不是,那么我只需要使用“=”吗? - user3055552
1个回答

8
您可以通过使用TextWatcher来实现此操作:
    editText.addTextChangedListener(new TextWatcher() {
        final String FUNCTION = "function";
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}

        @Override
        public void afterTextChanged(Editable s) {
            int index = s.toString().indexOf(FUNCTION);
            if (index >= 0) {
                s.setSpan(
                        new ForegroundColorSpan(Color.CYAN),
                        index,
                        index + FUNCTION.length(),
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
    });

非常感谢您抽出时间制作这个示例,但我尝试使用它时发现当我开始输入单词时它没有被突出显示。 - user3055552
1
没关系,它完美地工作了,我改变的只是 if (index >= 0) 这一行,现在它像魔法般运行!谢谢! - user3055552
1
不用谢,感谢您发现了错误(已修复)。请注意,这只会捕捉到第一次出现的单词,但很容易找出如何突出显示所有出现的单词。 - Krylez
在我写在 {} 之间时,有没有办法去掉高亮显示? - user3055552

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接