Android语法突出显示?

ng9*_*g93 23 syntax android syntax-highlighting editor

有没有人知道在Android上运行的语法高亮库?我看过jsyntaxpane,但似乎并不支持Android.

fra*_*acz 35

我设法基于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;
    }
}
Run Code Online (Sandbox Code Playgroud)

语法的颜色是硬编码的,但也可以通过应用程序首选项来设置.为了在a中显示Java源代码TextView,只需执行:

// 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));
Run Code Online (Sandbox Code Playgroud)

Java Prettify库使我的应用程序大约增加了50kB.

  • @Tarun,用"c"或"cpp"替换第一个"java"参数. (3认同)

mf5*_*511 20

好吧,我为Android做了一个开源的语法高亮编辑器:

https://github.com/markusfisch/ShaderEditor

它非常简单,可能只适用于小数据,但它可能是一个很好的起点.

  • 上面的链接被打破[这里是一个新的链接](https://github.com/markusfisch/ShaderEditor/blob/5af7129d05a1d122923ae78d110a55a09597589f/app/src/main/java/de/markusfisch/android/shadereditor/widget/ShaderEditor.java) (3认同)
  • 很好的例子。它绝对表明它的简单性。EditText来源:https://github.com/markusfisch/ShaderEditor/blob/master/src/de/markusfisch/android/shadereditor/ShaderEditor.java (2认同)

Com*_*are 14

对于只读语法突出显示,您有两个选择:

  1. 找到一个可以使用语法突出显示并生成HTML的Java库<font color="">(即没有CSS).然后,您可以使用Html.fromHtml()创建一个Spanned可以交给的对象TextView.

  2. 找到一个可以语法突出显示并生成任何类型HTML的Java库.然后,您可以在a中显示WebView.这似乎是评论者链接到android-codepad项目.

如果您正在为编辑器寻找语法高亮,那就更难了.虽然EditText可以采取同样SpannedTextView可以,你就必须运行通过语法高亮一切以反映变化,无论是在每个按键的基础上,或者在打字暂停后.或者,您需要更加严格地将语法突出显示规则烘焙到编辑过程中,这样您就可以以某种方式逐步调整突出显示而无需重做整个内容EditText.我还没有看到Android的开源语法高亮编辑器 - 一些封闭源代码在Play商店中的应用程序.

  • @ ng93:您是否在实现语法高亮显示方面取得了成功?如果是,您能解释一下实施过程吗?提前致谢. (2认同)

Ahm*_*deh 5

您好,您可以使用我的代码编辑器 安卓兵工厂 安卓兵工厂

播放视频

只需使用:

设置build.gradle(项目)

allprojects {
    repositories {
        ...
        maven {
            url 'https://jitpack.io'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

构建.gradle(应用程序)

dependencies {
    ...
    compile 'com.github.ahmadaghazadeh:CodeEditor:1.0.15'
}
Run Code Online (Sandbox Code Playgroud)

XML 数据绑定 <com.github.ahmadaghazadeh.editor.widget.CodeEditor bind:code="@{viewModel.code}" bind:lang="@{viewModel.lang}" android:layout_width="match_parent" android:layout_height=" match_parent"/>

XML

    <com.github.ahmadaghazadeh.editor.widget.CodeEditor
        bind:code="<html></html>"
        bind:lang="html"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
Run Code Online (Sandbox Code Playgroud)