web-dev-qa-db-fra.com

Mise en évidence de la syntaxe Android?

Est-ce que quelqu'un connaît la syntaxe mettant en évidence les bibliothèques qui fonctionnent sur Android? J'ai regardé jsyntaxpane mais cela ne semble pas supporter Android.

22
ng93

Pour la coloration syntaxique en lecture seule, vous avez deux options:

  1. Recherchez une bibliothèque Java capable de mettre en évidence la syntaxe et de générer du code HTML à l'aide de <font color=""> (c'est-à-dire, pas de CSS). Vous pouvez ensuite utiliser Html.fromHtml() pour créer un objet Spanned que vous pouvez remettre à un TextView.

  2. Recherchez une bibliothèque Java capable de mettre en évidence la syntaxe et de générer tout type de code HTML. Vous pouvez ensuite afficher cela dans une WebView. Cela semble être ce que le projet Android-codepad un commentaire associé à fait.

Si vous recherchez une coloration syntaxique pour un editor , c'est beaucoup plus difficile. Alors que EditText peut prendre la même Spanned que TextView, vous devez tout exécuter à l'aide du surligneur de syntaxe pour refléter les modifications, soit par frappe, soit après une pause dans la frappe. Ou bien, vous auriez besoin de mieux cerner les règles de mise en évidence de la syntaxe pour le processus d’édition, de sorte que vous puissiez les ajuster progressivement sans avoir à refaire tout le contenu de la EditText. Cependant, je n'ai pas encore vu d'éditeur de mise en évidence de la syntaxe Open Source pour Android, à part quelques applications fermées sous forme d'applications sur le Play Store.

13
CommonsWare

J'ai réussi à créer un surligneur de syntaxe pour Android, basé sur le Prettify . C'était facile, en fait, quand j'ai trouvé le Java Prettify . Il suffit de le télécharger (malheureusement, il n’est pas publié pour maven) et d’ajouter son fichier jar au chemin de compilation de votre application.

Le surligneur de syntaxe que j'ai créé à partir de cela:

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

Les couleurs de la syntaxe sont codées en dur, mais peuvent également être définies par les préférences de l’application. Pour afficher un code source Java dans un TextViewname__, procédez comme suit:

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

La bibliothèque Java Prettify a élargi mon application d’environ 50 Ko.

34
fracz

Eh bien, j'ai créé un éditeur de coloration syntaxique à code source ouvert pour Android:

https://github.com/markusfisch/ShaderEditor

C'est assez simple et peut-être seulement approprié pour de petites données, mais c'est probablement un bon point de départ.

20
mf511

J'ai créé une API pour la mise en surbrillance du texte qui peut résoudre votre problème.

https://github.com/nakshay/TextHighlighter

Cette API vous permet de passer des mots et des couleurs spécifiques à des mots et renverra la chaîne qui est formatée avec des balises HTML que vous pouvez envoyer à Html.fromHtml () pour obtenir le texte en surbrillance. ajoutez ci-dessous la dépendance de Gradle au fichier Gradle de votre module.

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

Bonjour, vous pouvez utiliser mon éditeur de code     Android Arsenal

 Play Video

Utilisez simplement:

Setup build.gradle (projet)

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

build.gradle (app)

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

Liaison de données XML

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 (application sur Play Store , source sur GitHub ) utilise une combinaison de WebView et Ace , un éditeur de code intégrable écrit en JavaScript.

Je travaille sur une application qui est un IDE pour Android, je pense que je vais dans le même sens.