有人知道在Android上可用的语法高亮库吗?我查看了jsyntaxpane,但似乎不支持Android。
有人知道在Android上可用的语法高亮库吗?我查看了jsyntaxpane,但似乎不支持Android。
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));
我为Android开发了一个开源的语法高亮编辑器:
https://github.com/markusfisch/ShaderEditor
该编辑器相当简单,可能只适用于小数据,但它很可能是一个不错的起点。
对于只读的语法高亮,您有两个选项:
查找一个能够使用<font color="">
(即没有CSS)进行语法高亮并生成HTML的Java库。然后,您可以使用Html.fromHtml()
创建一个Spanned
对象,并将其交给TextView
。
查找一个能够语法高亮并生成任何类型的HTML的Java库。然后可以在WebView
中显示。这似乎就是评论员链接到的the android-codepad
project所做的事情。
如果您正在寻找编辑器的语法高亮,则更加困难。虽然EditText
可以接受与TextView
相同的Spanned
,但您需要在每次击键或者暂停输入后运行语法高亮以反映变化。或者,您需要将语法高亮规则与编辑过程更紧密地结合起来,以便可以在不必重新执行EditText
的整个内容的情况下逐步调整高亮。我没有看到针对Android的开源语法高亮编辑器 - 尽管Play商店上有一些作为应用程序的专有软件。
<font color="">
魔法吗? - fracz使用方法:
设置 build.gradle (project)
allprojects {
repositories {
...
maven {
url 'https://jitpack.io'
}
}
}
build.gradle(应用程序)
dependencies {
...
compile 'com.github.ahmadaghazadeh:CodeEditor:1.0.15'
}
<com.github.ahmadaghazadeh.editor.widget.CodeEditor
bind:code="<html></html>"
bind:lang="html"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
https://github.com/nakshay/TextHighlighter
这个API允许您传递特定于单词的单词和颜色,并返回使用HTML标记格式化的字符串,您可以将其发送到Html.fromHtml()以获取突出显示的文本。在您的模块gradle文件中添加以下Gradle依赖项。compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'
920文本编辑器(Play Store上的应用程序,GitHub上的源代码)使用WebView和Ace的组合,Ace是一个用JavaScript编写的可嵌入代码编辑器。
我正在开发一款Android IDE应用程序,我认为我也会采用同样的方式。
如果您愿意,可以使用Highlight库创建自己的语法高亮。
该库通过方案(scheme)工作,这些方案基本上是规则(带有正则表达式)和相关修改的组合。有一些现成的方案,如ColorScheme、SyleScheme、OnClickScheme等,但您也可以实现Scheme接口并创建自己的方案。
该库的基类是Highlight,其中处理跨度(spans)。您可以直接使用它,例如下面的示例中,我们从TextView中突出显示Java语言的一些关键字。
//create Highlight
Highlight highlight = new Highlight();
//scheme color example
highlight.addScheme(
new ColorScheme(
Pattern.compile("\\b(private)|(public)|(protected)|(void)\\b"),
Color.parseColor("#CC7832")
)
);
//...
//textview example
highlight.setSpan(binding.toolbarTitle);
但是要创建一个语法高亮,需要更多的东西,为此有HighlightTextWatcher类,它针对使用LinesTextWatcher类(您可以扩展)的更改行处理的大型文本进行了优化。请参见使用此类的示例。
//create TextWatcher
HighlightTextWatcher highlightTextWatcher = new HighlightTextWatcher();
//scheme color example
highlightTextWatcher.addScheme(
new ColorScheme(
Pattern.compile("\\b(private)|(public)|(protected)|(void)\\b"),
Color.parseColor("#CC7832")
)
);
//...
//edittext example
binding.edittext.addTextChangedListener(highlightTextWatcher);
实现'com.github.Irineu333:Highlight:1.0.1'(jitpack)