Androidで動作するシンタックスハイライトライブラリを知っている人はいますか? jsyntaxpaneを見てきましたが、Androidをサポートしていないようです。
読み取り専用の構文強調表示には、次の2つのオプションがあります。
<font color="">
を使用して(つまり、CSSなしで)構文を強調表示してHTMLを生成できるJavaライブラリを見つけます)。次に、Html.fromHtml()
を使用して、に渡すことができるSpanned
オブジェクトを作成できます。 TextView
。
シンタックスハイライトが可能で、あらゆる種類のHTMLを生成できるJavaライブラリを見つけます。それをWebView
に表示できます。これは Android-codepad
プロジェクト リンクされているコメント投稿者は行います。
editorの構文の強調表示を探している場合、それは非常に困難です。 EditText
はSpanned
と同じTextView
を取ることができますが、キーストロークごとに、または入力を一時停止した後に、変更を反映するために構文ハイライトを介してすべてを実行する必要があります。または、構文の強調表示ルールを編集プロセスに厳密に焼き付ける必要があるため、EditText
の内容全体をやり直すことなく、強調表示を段階的に調整できます。 Android-Playストアのアプリとして、いくつかのクローズドソースのエディターを強調表示するオープンソースの構文を見たことがありません。
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;
}
}
構文の色はハードコーディングされていますが、アプリケーションの設定によって設定することもできます。 JavaソースコードをTextView
に表示するには、次のようにします。
// 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大きくなりました。
さて、私はAndroid用のオープンソースの構文強調エディターを作成しました。
https://github.com/markusfisch/ShaderEditor
これは非常に単純で、おそらく小さなデータにのみ適していますが、おそらく良い出発点です。
単に使用してください:
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"/>
私はあなたの問題を解決することができるテキスト強調表示のためのAPIを作成しました。
https://github.com/nakshay/TextHighlighter
このAPIを使用すると、単語と単語に固有の色を渡すことができ、強調表示されたテキストを取得するためにHtml.fromHtml()に送信できるhtmlタグでフォーマットされた文字列が返されます。以下のGradle依存関係をモジュールのgradleファイルに追加します。
compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'