web-dev-qa-db-ja.com

Android構文の強調表示?

Androidで動作するシンタックスハイライトライブラリを知っている人はいますか? jsyntaxpaneを見てきましたが、Androidをサポートしていないようです。

23
ng93

読み取り専用の構文強調表示には、次の2つのオプションがあります。

  1. <font color="">を使用して(つまり、CSSなしで)構文を強調表示してHTMLを生成できるJavaライブラリを見つけます)。次に、Html.fromHtml()を使用して、に渡すことができるSpannedオブジェクトを作成できます。 TextView

  2. シンタックスハイライトが可能で、あらゆる種類のHTMLを生成できるJavaライブラリを見つけます。それをWebViewに表示できます。これは Android-codepadプロジェクト リンクされているコメント投稿者は行います。

editorの構文の強調表示を探している場合、それは非常に困難です。 EditTextSpannedと同じTextViewを取ることができますが、キーストロークごとに、または入力を一時停止した後に、変更を反映するために構文ハイライトを介してすべてを実行する必要があります。または、構文の強調表示ルールを編集プロセスに厳密に焼き付ける必要があるため、EditTextの内容全体をやり直すことなく、強調表示を段階的に調整できます。 Android-Playストアのアプリとして、いくつかのクローズドソースのエディターを強調表示するオープンソースの構文を見たことがありません。

14
CommonsWare

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大きくなりました。

34
fracz

さて、私はAndroid用のオープンソースの構文強調エディターを作成しました。

https://github.com/markusfisch/ShaderEditor

これは非常に単純で、おそらく小さなデータにのみ適していますが、おそらく良い出発点です。

22
mf511

こんにちは、私のCodeEditorを使用できます Android Arsenal

Play Video

単に使用してください:

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"/>
3
Ahmad Aghazadeh

私はあなたの問題を解決することができるテキスト強調表示のためのAPIを作成しました。

https://github.com/nakshay/TextHighlighter

このAPIを使用すると、単語と単語に固有の色を渡すことができ、強調表示されたテキストを取得するためにHtml.fromHtml()に送信できるhtmlタグでフォーマットされた文字列が返されます。以下のGradle依存関係をモジュールのgradleファイルに追加します。

compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'
1
Akshay

920テキストエディタ(アプリは Playストア 、ソースは GitHub )は、 WebViewAce の組み合わせを使用します。 JavaScriptで記述された埋め込み可能なコードエディタ。

私はAndroid用のIDE)であるアプリに取り組んでいます、私は同じように進んでいると思います。