Android 语法高亮?

标签 android syntax editor syntax-highlighting

有谁知道适用于 Android 的语法高亮库?我看过 jsyntaxpane,但它似乎不支持 Android。

最佳答案

我设法创建了一个基于 Prettify 的 Android 语法荧光笔。 .实际上,当我找到 Java Prettify 时,这很容易。 .只需下载它(遗憾的是,它没有为 maven 发布)并将其 jar 添加到您的应用程序的构建路径中。

我基于它创建的语法高亮:

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 语法高亮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11987660/

相关文章:

Android滑动刷新动画一直在旋转

安卓 : Image thumbnail gallery from URI's stored in database

java - 将 Strings.xml 中的 String-Array 更改为 ArrayList

swift - if 语句和其他语句中的变量上有感叹号前缀吗?

Xcode 4 - 不用鼠标返回编辑器

java - cursor.moveToFirst 似乎被跳过

android - Kotlin 三元运算符

sql - 验证 T-SQL 存储过程的可靠方法

visual-studio-code - 如何禁用 VS Code 中显示函数参数描述和重载(参数提示)的小部件?

java - 编辑中返回意外值 - JTree