Android语法高亮?

有谁知道在Android上工作的语法高亮库吗? 我看了jsyntaxpane,但似乎并不支持Android。

对于只读语法高亮显示,您有两个select:

  1. find一个可以使用<font color=""> (即没有CSS)来语法高亮显示和生成HTML的Java库。 然后,您可以使用Html.fromHtml()创build一个Html.fromHtml()对象,您可以将其交给TextView

  2. find一个可以语法高亮并生成任何types的HTML的Java库。 然后你可以在WebView显示它。 这似乎是链接到的评论者所做的android-codepad项目 。

如果您正在为编辑寻求语法突出显示,那就显得更加困难。 虽然EditText可以使用与TextView相同的Spanned ,但是您必须通过语法高亮显示来运行所有内容,以反映每次按键或在键入暂停之后的更改。 或者,您需要在编辑过程中更加严格地烘烤语法突出显示规则,以便您可以以某种方式增量调整突出显示,而无需重新编辑EditText的全部内容。 虽然我还没有看到Android的开源语法高亮编辑器,但是Play商店中的一些应用程序是封闭源代码的。

基于Prettify ,我设法为Android创build了一个语法突出显示器 。 实际上,当我findJava Prettify时很容易。 只要下载它(不幸的是,这不是发布的maven),并将其jar添加到您的应用程序的构buildpath。

基于它创build的语法突出显示器:

 public class PrettifyHighlighter { private static final Map<String, String> COLORS = buildColorsMap(); private static final String FONT_PATTERN = "<font color=\"#%s\">%s</font>"; private final Parser parser = new PrettifyParser(); public String highlight(String fileExtension, String sourceCode) { StringBuilder highlighted = new StringBuilder(); List<ParseResult> results = parser.parse(fileExtension, sourceCode); for(ParseResult result : results){ String type = result.getStyleKeys().get(0); String content = sourceCode.substring(result.getOffset(), result.getOffset() + result.getLength()); highlighted.append(String.format(FONT_PATTERN, getColor(type), content)); } return highlighted.toString(); } private String getColor(String type){ return COLORS.containsKey(type) ? COLORS.get(type) : COLORS.get("pln"); } private static Map<String, String> buildColorsMap() { Map<String, String> map = new HashMap<>(); map.put("typ", "87cefa"); map.put("kwd", "00ff00"); map.put("lit", "ffff00"); map.put("com", "999999"); map.put("str", "ff4500"); map.put("pun", "eeeeee"); map.put("pln", "ffffff"); return map; } } 

语法的颜色是硬编码的,但也可以由应用程序首选项设置。 为了在TextView显示Java源代码,只需要:

 // code is a String with source code to highlight // myTextView is a TextView component PrettifyHighlighter highlighter = new PrettifyHighlighter(); String highlighted = highlighter.highlight("java", code); myTextView.setText(Html.fromHtml(highlighted)); 

Java Prettify库使我的应用程序大约50kB。

那么,我做了一个Android的开源语法高亮编辑器:

https://github.com/markusfisch/ShaderEditor

这很简单,也许只适用于小数据,但这可能是一个很好的起点。

我已经创build了一个可以解决你的问题的文本高亮的API。

https://github.com/nakshay/TextHighlighter

此API允许您传递特定于单词的单词和颜色,并将返回格式为html标记的string,您可以将其发送到Html.fromHtml()以获得突出显示的文本。 将下面的Gradle依赖添加到你的模块的gradle文件中。

 compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'