28

Androidで動作する構文強調表示ライブラリを知っている人はいますか? jsyntaxpane を見てきましたが、Android をサポートしていないようです。

4

7 に答える 7

35

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

于 2013-11-05T10:45:45.280 に答える
22

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

https://github.com/markusfisch/ShaderEditor

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

于 2013-06-24T21:06:29.357 に答える
18

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

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

  2. 構文を強調表示し、あらゆる種類の HTML を生成できる Java ライブラリを見つけます。その後、それを で表示できますWebView。これは、コメント投稿者がリンクしているandroid-codepadプロジェクトが行っていることのようです。

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

于 2012-08-16T13:13:45.430 に答える
1

問題を解決できるテキスト強調表示用の API を作成しました。

https://github.com/nakshay/TextHighlighter

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

compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'
于 2016-08-15T08:24:19.960 に答える