如何解决有线着色问题Android EditText
我需要在EditText的用户输入中添加类似代码的主题。我这样做的方法是将文本分类为标记,每个标记都有值和类型,相同的类型具有相同的颜色。之后,我将这些标记加载到EditText中并为其着色,但是会发生有线错误。
此情况发生在以下时间:
这很奇怪,因为我的词法分析器工作正常,这是控制台输出:
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='SPACE',value='{'}
ColoredToken{key='SPACE',value=' '}
ColoredToken{key='SPACE',value=' '}
ColoredToken{key='KEYWORD',value='b'}
ColoredToken{key='SPACE',value='10'}
ColoredToken{key='SIGNS',value='}'}
现在让您理解,蓝色代表第一张图片中的名称,白色代表关键字和符号,问题是键入一段时间后,所有内容开始变成蓝色,而令牌正确。
这是着色和加载令牌的代码:
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;
}
如果需要,我可以提供词法分析器代码,但是如上所述,令牌尚可,着色是有问题的。
编辑: 如果有人知道更好的着色/设置主题代码的方式,那么您可以提供一些示例代码并解释其工作原理,那将是很好的。
解决方法
尽量使用 textprocessor 这样你就不必自己实现了,你甚至可以用你自己的语言训练它
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。