Podświetlanie Składni Androida?

Czy ktoś zna biblioteki podświetlania składni, które działają na Androidzie? Patrzyłem na jsyntaxpane, ale to chyba nie obsługuje Androida.

Author: Andrew T., 2012-08-16

6 answers

Dla podświetlania składni tylko do odczytu, masz dwie opcje:

  1. Znajdź bibliotekę Javy, która może podświetlić składnię i wygenerować HTML za pomocą <font color=""> (tzn. bez CSS). Następnie możesz użyć Html.fromHtml(), aby utworzyć Spanned obiekt, który możesz przekazać TextView.

  2. Znajdź bibliotekę Java, która może podświetlić składnię i wygenerować dowolny rodzaj HTML. Następnie można to wyświetlić w WebView. Wygląda na to, że android-codepad} Projekt komentator powiązany z tak.

Jeśli szukasz podświetlenia składni dla edytora , jest to znacznie trudniejsze. Podczas gdy EditText może przyjmować to samo Spanned, co TextView, Musisz uruchomić wszystko przez zakreślacz składni, aby odzwierciedlić zmiany, albo na podstawie naciśnięcia klawisza, albo po przerwie w pisaniu. Albo, trzeba będzie piec reguł podświetlania składni znacznie bardziej ściśle do procesu edycji, więc można jakoś stopniowo dostosować podświetlanie bez konieczność powtórzenia całej zawartości EditText. Nie widziałem edytora podświetlania składni open source dla Androida - kilka zamkniętych źródeł jako aplikacje w Sklepie Play.

 13
Author: CommonsWare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-16 13:13:45

Udało mi się stworzyć zakreślacz składni dla Androida, oparty na Prettify . To było proste, kiedy znalazłem Java Prettify . Wystarczy go pobrać (niestety, nie jest on opublikowany dla Mavena) i dodać jego jar do ścieżki budowania aplikacji.

Zakreślacz składni, który na jego podstawie stworzyłem:

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;
    }
}

Kolory składni są zakodowane na twardo, ale mogą być również ustawiane przez np. preferencje aplikacji. W celu wyświetlenia kodu źródłowego Java w TextView, po prostu zrób:

// 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));

Biblioteka Java Prettify powiększyła moją aplikację o około 50kB.

 33
Author: fracz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-11 10:06:27

Cóż, zrobiłem edytor podświetlania składni open-source dla Androida:

Https://github.com/markusfisch/ShaderEditor

Jest to dość proste i może nadaje się tylko do małych danych, ale prawdopodobnie jest to dobry punkt wyjścia.

 20
Author: mf511,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-24 21:06:29

Stworzyłem API do podświetlania tekstu, które może rozwiązać twój problem.

Https://github.com/nakshay/TextHighlighter

Ten API pozwala na przekazywanie słów i kolorów specyficznych dla słów i zwróci ciąg znaków, który jest sformatowany za pomocą znaczników html, które można wysłać do Html.fromHtml (), aby uzyskać podświetlony tekst. dodaj zależność Gradle poniżej do pliku gradle twojego modułu.

compile 'com.github.akshay-naik:texthighlighterapi:1.1.0'
 1
Author: Akshay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-06 05:12:51

920 edytor tekstu (aplikacja na Play Store, Źródło na GitHub) używa kombinacji WebViewi Ace, wbudowanego edytora kodu napisanego w JavaScript.

Pracuję nad aplikacją, która jest IDE dla Androida, myślę, że idę tą samą drogą.

 0
Author: Antonio Vinicius Menezes Medei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-04 02:50:31

Hi you can use my CodeEditor

Po prostu użyj:

Setup buduj.gradle (projekt)

allprojects {
    repositories {
        ...
        maven {
            url 'https://jitpack.io'
        }
    }
}
Zbuduj.gradle (app)
dependencies {
    ...
    compile 'com.github.ahmadaghazadeh:CodeEditor:1.0.4'
}

XML DataBinding

XML

    <com.github.ahmadaghazadeh.editor.widget.CodeEditor
        bind:code="<html></html>"
        bind:lang="html"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
 0
Author: Ahmad Aghazadeh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-05 05:43:47