有没有人知道在Android上运行的语法高亮库?我看过jsyntaxpane,但似乎不支持Android。
答案 0 :(得分:34)
我设法根据Prettify为Android创建语法高亮显示器。实际上,当我找到Java Prettify时很容易。只需下载它(遗憾的是,它不是为maven发布的)并将其jar添加到应用程序的构建路径中。
我基于它创建的语法高亮显示:
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;
}
}
语法的颜色是硬编码的,但也可以通过应用程序首选项来设置。要在TextView
中显示 Java 源代码,请执行以下操作:
// 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));
Java Prettify库使我的应用程序大约增加了50kB。
答案 1 :(得分:20)
好吧,我为Android做了一个开源的语法高亮编辑器:
https://github.com/markusfisch/ShaderEditor
它非常简单,可能只适用于小数据,但它可能是一个很好的起点。
答案 2 :(得分:13)
对于只读语法高亮显示,您有两个选择:
找到一个可以使用<font color="">
语法突出显示并生成HTML的Java库(即没有CSS)。然后,您可以使用Html.fromHtml()
创建一个Spanned
对象,您可以将其移至TextView
。
找到一个可以语法突出显示并生成任何类型HTML的Java库。然后,您可以在WebView
中显示该内容。这似乎是评论者所关联的the android-codepad
project。
如果您正在为编辑器寻求语法突出显示,那就更加困难了。虽然EditText
可以采用与Spanned
相同的TextView
,但您必须通过语法高亮显示来运行所有内容以反映更改,无论是基于每次击键,还是在暂停之后打字。或者,您需要更加严格地将语法突出显示规则烘焙到编辑过程中,这样您就可以以某种方式逐步调整突出显示,而无需重做EditText
的全部内容。我还没有看到Android的开源语法高亮编辑器 - 一些封闭源代码编辑器作为Play商店中的应用程序。
答案 3 :(得分:1)
我已经创建了一个用于文本突出显示的API,可以解决您的问题。
https://github.com/nakshay/TextHighlighter
此API允许您传递特定于单词的单词和颜色,并返回使用html标签格式化的字符串,您可以将其发送到Html.fromHtml()以获取突出显示的文本。将Gradle依赖项添加到模块的gradle文件中。
compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'
答案 4 :(得分:1)
只需使用:
设置 build.gradle(项目)
allprojects {
repositories {
...
maven {
url 'https://jitpack.io'
}
}
}
build.gradle(应用程序)
dependencies {
...
compile 'com.github.ahmadaghazadeh:CodeEditor:1.0.15'
}
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"/>
答案 5 :(得分:0)
920文本编辑器(Play Store上的应用,GitHub上的来源)使用WebView和Ace的组合,这是一个用JavaScript编写的可嵌入代码编辑器。
我正在开发一个适用于Android的IDE应用程序,我想我会采用相同的方式。