Sintaxis de Android destacando?

¿Alguien sabe de las bibliotecas de resaltado de sintaxis que funcionan en Android? He mirado jsyntaxpane pero eso no parece apoyar a Android.

Para el resaltado de sintaxis de solo lectura, tiene dos opciones:

  1. Encuentra una biblioteca de Java que puede sintaxis resaltar y generar HTML usando <font color=""> (es decir, sin CSS). A continuación, puede utilizar Html.fromHtml() para crear un objeto Spanned que se puede entregar a un TextView .

  2. Encontrar una biblioteca de Java que puede sintaxis resaltar y generar cualquier tipo de HTML. A continuación, puede mostrar que en un WebView . Esto parece ser lo que hace el proyecto android-codepad un comentador vinculado.

Si está buscando resaltado de sintaxis para un editor , eso es mucho más difícil. Mientras que EditText puede tomar el mismo Spanned que TextView puede, tendría que ejecutar todo a través del resaltador de sintaxis para reflejar los cambios, ya sea por pulsación de tecla o después de una pausa en la escritura. O, usted necesitaría hornear las reglas de resaltado de sintaxis mucho más firmemente al proceso de edición, así que usted puede de alguna manera ajustar incrementalmente el resaltado sin tener que rehacer todo el contenido del EditText . No he visto un editor de código abierto de sintaxis para Android, algunos de ellos de código cerrado como aplicaciones en Play Store.

Me las arreglé para crear un resaltador de sintaxis para Android, basado en el Prettify . Fue fácil, de hecho, cuando encontré el Prettify de Java . Basta con descargarlo (por desgracia, no se publica para maven) y agregar su jar a la ruta de construcción de su aplicación.

El resaltador de sintaxis que creé basado en él:

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

Los colores de la sintaxis son hardcoded, pero también puede ser establecido por, por ejemplo, las preferencias de aplicación. Con el fin de mostrar un código fuente Java en un TextView , sólo tiene que hacer:

 // 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 biblioteca Java Prettify hizo mi aplicación alrededor de 50 KB más grande.

Bueno, hice un editor de código abierto de sintaxis para Android:

https://github.com/markusfisch/ShaderEditor

Es muy simple y quizás sólo adecuado para datos pequeños, pero probablemente sea un buen punto de partida.

He creado una API para resaltar texto que puede resolver su problema.

https://github.com/nakshay/TextHighlighter

Esta API le permite pasar palabras y colores específicos a las palabras y devolverá la cadena que está formateada con etiquetas html que puede enviar a Html.fromHtml () para obtener texto resaltado. Añada la dependencia de Gradle al archivo gradle de su módulo.

 compile 'com.github.akshay-naik:texthighlighterapi:1.1.0' 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.