java - 有线着色问题 Android EditText

标签 java android android-studio android-edittext

我需要向 EditText 中的用户输入添加类似代码的主题。我这样做的方法是将文本词法化为标记,每个标记都有值和类型,相同的类型具有相同的颜色。之后,我将这些标记加载到我的 EditText 中并为它们着色,但是,出现了有线错误。

这是错误的一个例子: 一开始一切都着色正常enter image description here

这发生在:

enter image description here

这很奇怪,因为我的词法分析器工作正常,这是控制台输出:

    ColoredToken{key='KEYWORD', value='int'}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='NAME', value='a'}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='SIGNS', value='='}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='BID', value='10'}
    ColoredToken{key='KEYWORD', value='if'}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='SIGNS', value='('}
    ColoredToken{key='SIGNS', value=')'}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='SIGNS', value='{'}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='KEYWORD', value='int'}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='NAME', value='b'}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='SIGNS', value='='}
    ColoredToken{key='SPACE', value=' '}
    ColoredToken{key='BID', value='10'}
    ColoredToken{key='SIGNS', value='}'}

现在你明白了,第一张图片中蓝色代表名字,白色代表关键字和标志,问题是在输入一段时间后一切开始变成蓝色,而标记是正确的。

这是着色和加载 token 的代码:

    public static SpannableStringBuilder runCodeColor(String codeString) {
        ArrayList<String> code = new ArrayList<>(Arrays.asList(codeString.split("\n")));
        SpannableStringBuilder coloredCode = new SpannableStringBuilder("");
        int newLines = countNewLine(codeString);

        for (int i = 0; i < code.size(); i++) {
            ArrayList<ColoredToken> tmpTokens = new ArrayList<>(ColoredLexer.lexer(code.get(i)));
            for (int j = 0; j < tmpTokens.size(); j++) {
                coloredCode.append(tmpTokens.get(j).getValue());
                coloredCode.setSpan(tmpTokens.get(j).getDarkColorSpan(), coloredCode.length() - tmpTokens.get(j).getValue().length(), coloredCode.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                System.out.println(tmpTokens.get(j).toString());
            }
            if (newLines > 0) {
                coloredCode.append("\n");
                newLines--;
            }
        }
        return coloredCode;
    }

如果需要,我可以提供词法分析器代码,但如上所述,标记没问题,着色是有问题的。

编辑: 如果有人知道为代码着色/设置主题的更好方法,那么如果您能提供一些示例代码并解释其工作原理,那就太好了。

最佳答案

尝试使用文本处理器这样你就不必自己实现它,你甚至可以为你自己的语言训练它

关于java - 有线着色问题 Android EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64541818/

相关文章:

android - 在 Android 中设置警报管理器

java - 如何保护/加密您的 Java 类?

java - java中1/0和1.0/0.0的区别

java - combinebykey 和 aggregatebykey 的区别

android - 错误 : open failed: ENOENT (No such file or directory)

java - 如何使用改造设置路径参数

java - Filenet 中通过 EJB 传输的事务管理

android - 解析字符串信息android?

java - 如何在 Java Android 中共享/导出 JSON 文件

java - 如何在 kiosk 模式/锁定任务模式下将安装程序包列入白名单?