Coloration Syntaxique Android?
Est-ce que quelqu'un connaît des bibliothèques de coloration syntaxique qui fonctionnent sur Android? J'ai regardé jsyntaxpane mais cela ne semble pas prendre en charge Android.
6 réponses
Pour la coloration syntaxique en lecture seule, vous avez deux options:
Trouvez une bibliothèque Java qui peut mettre en évidence la syntaxe et générer du HTML en utilisant
<font color="">
(c'est-à-dire sans CSS). Vous pouvez ensuite utiliserHtml.fromHtml()
pour créer un objetSpanned
que vous pouvez remettre à unTextView
.Trouvez une bibliothèque Java qui peut mettre en évidence la syntaxe et générer N'importe quel type de HTML. Vous pouvez alors l'afficher dans un
WebView
. Cela semble être ce que leandroid-codepad
projet un commentaire lié à faire.
Si vous recherchez la coloration syntaxique pour un éditeur , c'est beaucoup plus difficile. Alors que EditText
peut prendre le même Spanned
que TextView
, vous devrez tout exécuter à travers le surligneur de syntaxe pour refléter les changements, soit par frappe, soit après une pause dans la frappe. Ou, vous devez faire cuire les règles de coloration syntaxique beaucoup plus étroitement au processus d'édition, de sorte que vous pouvez en quelque sorte ajuster progressivement la surbrillance sans avoir à refaire tout le contenu du EditText
. Je n'ai pas vu un éditeur de coloration syntaxique open source pour Android-quelques sources fermées en tant qu'applications sur le Play Store, cependant.
J'ai réussi à créer un surligneur de syntaxe pour Android, basé sur le Prettify . Il était facile, en fait, quand j'ai trouvé le Java Embellir. Il suffit de le télécharger (malheureusement, il n'est pas publié pour maven) et d'ajouter son jar au chemin de construction de votre application.
Le surligneur de syntaxe que j'ai créé sur cette base:
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. Afin d'afficher un code source Java dans un TextView
, il suffit de faire:
// 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 agrandi mon application d'environ 50 Ko.
Eh bien, j'ai fait un éditeur de coloration syntaxique open-source pour Android:
Https://github.com/markusfisch/ShaderEditor
C'est assez simple et peut-être seulement adapté aux petites données, mais c'est probablement un bon point de départ.
J'ai créé une API pour la mise en évidence 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 aux mots et retournera la chaîne qui est formatée avec des balises html que vous pouvez envoyer au Html.fromHtml() pour obtenir du texte en surbrillance. ajoutez la dépendance Gradle ci-dessous au fichier gradle de votre module.
compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'
920 Éditeur de Texte (app sur Play Store, source sur GitHub) utilise une combinaison de WebView et As, une intégrable éditeur de code écrit en JavaScript.
Je travaille sur une application qui est un IDE pour Android, je pense que je vais de la même manière.
Bonjour, vous pouvez utiliser mon CodeEditor
Utilisez simplement:
Configuration construire.gradle (projet)
allprojects {
repositories {
...
maven {
url 'https://jitpack.io'
}
}
}
Construire.gradle (app)
dependencies {
...
compile 'com.github.ahmadaghazadeh:CodeEditor:1.0.4'
}
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"/>