it-swarm.com.de

Android Syntax-Hervorhebung?

Kennt jemand die Syntax-Hervorhebung von Bibliotheken, die auf Android funktionieren? Ich habe mir jsyntaxpane angeschaut, aber das scheint Android nicht zu unterstützen.

22
ng93

Für die Hervorhebung schreibgeschützter Syntax haben Sie zwei Möglichkeiten:

  1. Suchen Sie eine Java-Bibliothek, die mithilfe von <font color=""> (d. H. Ohne CSS) HTML hervorheben und generieren kann. Sie können dann Html.fromHtml() verwenden, um ein Spannedname__-Objekt zu erstellen, das Sie einem TextViewübergeben können.

  2. Suchen Sie eine Java-Bibliothek, die Syntax hervorhebt und jede Art von HTML generiert. Sie können dies dann in einem WebViewanzeigen. Dies scheint das zu sein, was das Android-codepad Projekt ein damit verknüpfter Kommentator macht.

Wenn Sie nach Syntaxhervorhebungen für einen Editor suchen, ist dies erheblich schwieriger. Während EditTextdenselben Spannedannehmen kann wie TextViewname__, müssten Sie alles durch den Syntax-Textmarker laufen lassen, um Änderungen widerzuspiegeln, entweder auf Tastendruckbasis oder nach einer Tipppause. Oder Sie müssen die Syntaxhervorhebungsregeln viel enger an den Bearbeitungsprozess anpassen, damit Sie die Hervorhebung schrittweise anpassen können, ohne den gesamten Inhalt der EditTextwiederholen zu müssen. Ich habe noch keinen Open-Source-Editor für Syntax-Hervorhebungen für Android gesehen - ein paar Closed-Source-Editoren als Apps im Play Store.

13
CommonsWare

Ich habe es geschafft, einen Syntax-Textmarker für Android zu erstellen, der auf Prettify basiert. Es war eigentlich einfach, als ich das Java Prettify fand. Laden Sie es einfach herunter (es ist leider nicht für Maven veröffentlicht) und fügen Sie es dem Erstellungspfad Ihrer Anwendung hinzu.

Der Syntax-Textmarker, den ich darauf basierend erstellt habe:

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;
    }
}

Die Farben der Syntax sind fest codiert, können aber auch durch d. H. Anwendungspräferenzen eingestellt werden. Um einen Java Quellcode in einer TextViewanzuzeigen, machen Sie einfach Folgendes:

// 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));

Die Java Prettify-Bibliothek vergrößerte meine Anwendung um etwa 50 KB.

34
fracz

Nun, ich habe einen Open-Source-Editor für Syntax-Hervorhebungen für Android erstellt:

https://github.com/markusfisch/ShaderEditor

Es ist recht einfach und vielleicht nur für kleine Daten geeignet, aber wahrscheinlich ein guter Ausgangspunkt.

20
mf511

Ich habe eine API für die Hervorhebung von Texten erstellt, die Ihr Problem lösen kann.

https://github.com/nakshay/TextHighlighter

Mit dieser API können Sie Wörter und Farben übergeben, die für Wörter spezifisch sind, und die Zeichenfolge zurückgeben, die mit HTML-Tags formatiert ist, die Sie an Html.fromHtml () senden können, um hervorgehobenen Text zu erhalten. Fügen Sie der Gradle-Datei Ihres Moduls die folgende Gradle-Abhängigkeit hinzu.

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

Hallo ihr könnt meinen CodeEditor benutzen     Android Arsenal

 Play Video

Einfach benutzen:

Setup build.gradle (Projekt)

allprojects {
    repositories {
        ...
        maven {
            url 'https://jitpack.io'
        }
    }
}

build.gradle (App)

dependencies {
    ...
    compile 'com.github.ahmadaghazadeh:CodeEditor:1.0.15'
}

XML DataBinding

XML

    <com.github.ahmadaghazadeh.editor.widget.CodeEditor
        bind:code="<html></html>"
        bind:lang="html"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"/>
1
Ahmad Aghazadeh

920 Text Editor (App auf Play Store , Quelle auf GitHub ) verwendet eine Kombination aus WebView und Ace , einem in JavaScript geschriebenen, einbettbaren Code-Editor.

Ich arbeite an einer App, die eine IDE für Android ist. Ich denke, ich gehe den gleichen Weg.