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.
- ¿Qué significa ".line" en la sintaxis del código smali? (Código Android-Smali)
- Sintaxis de intenciones de Android
- ¿Cuál es el equivalente de Java de la Palabra clave Estática de VB.NET?
- AsyncTask's doInBackground (Params ... params)
- Necesita explicación sobre esta sintaxis de inicialización de objetos Java
- ¿Cuál es la sintaxis correcta para definir una actividad en el archivo de manifiesto
- ¿Cuál es la notación de puntos entre los nombres de las clases y qué significa?
- Error de sintaxis en tokens, variableDeclarator esperado en su lugar
- ¿Qué es diferente entre @ + id / android: list y @ id / android: list?
- Explicación básica de Contexto en android
- Cómo escapar% en String.Format?
- Multi claves primarias en Android SQLite
Para el resaltado de sintaxis de solo lectura, tiene dos opciones:
-
Encuentra una biblioteca de Java que puede sintaxis resaltar y generar HTML usando
<font color="">
(es decir, sin CSS). A continuación, puede utilizarHtml.fromHtml()
para crear un objetoSpanned
que se puede entregar a unTextView
. -
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 proyectoandroid-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'