Intereting Posts
Завершите старую активность и запустите новую или наоборот IAB startSetup NullPointerException Android: обнаружит, когда GPS включен / выключен (или когда приложение больше не использует его) Как добавить эффекты изображения в Android? Android Studio не может запускать git, хотя на самом деле может Преобразование из строки в json object android Как фрагменты влияют на активность «единая, целенаправленная вещь, которую пользователь может делать»? Набор математических функций в LaTeX для рендеринга в приложении Android Как отключить SSLv3 в android для HttpsUrlConnection? Android Navigation Drawer и windowActionBarOverlay = true Объединение двух png-файлов в android Не удалось запустить работу: UnsupportedOperationException: addView (View, LayoutParams) не поддерживается в AdapterView Android: Как вы можете выровнять кнопку внизу и listview выше? Получить положение изображения на макете android Какой вид следует использовать для новой навигации нижнего уровня материала?

Подсветка синтаксиса Android?

Кто-нибудь знает о синтаксисе выделения библиотек, которые работают на Android? Я посмотрел на jsyntaxpane, но, похоже, не поддерживает Android.

Solutions Collecting From Web of "Подсветка синтаксиса Android?"

Для подсветки синтаксиса только для чтения у вас есть два варианта:

  1. Найдите библиотеку Java, которая может выделять синтаксис и генерировать HTML, используя <font color=""> (т. Е. Без CSS). Затем вы можете использовать Html.fromHtml() для создания объекта Spanned который вы можете передать TextView .

  2. Найдите библиотеку Java, которая может выделять синтаксис и генерировать любой вид HTML. Затем вы можете отобразить это в WebView . Похоже, что проект android-codepad связан с комментарием.

Если вы ищете подсветку синтаксиса для редактора , это значительно сложнее. В то время как EditText может использовать тот же Spanned что и TextView , вам нужно будет запускать все через синтаксический ярлык, чтобы отражать изменения либо на основе каждого нажатия клавиши, либо после паузы при наборе текста. Или вам нужно будет исправить правила подсветки синтаксиса гораздо более жестко для процесса редактирования, так что вы можете как-то постепенно корректировать выделение, не переделывая все содержимое EditText . Я не видел редактор синтаксиса с открытым исходным кодом для Android, однако некоторые из них были закрыты как приложения в Play Маркете.

Мне удалось создать синтаксический ярлык для Android, основанный на Prettify . На самом деле было легко, когда я нашел Java Prettify . Просто скачайте его (к сожалению, он не опубликован для maven) и добавьте его банку в путь сборки вашего приложения.

Ярлык синтаксиса, который я создал на нем:

 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

Это довольно просто и, возможно, подходит только для небольших данных, но, вероятно, это хорошая отправная точка.

Я создал API для выделения текста, который может решить вашу проблему.

https://github.com/nakshay/TextHighlighter

Этот API позволяет передавать слова и цвета, специфичные для слов, и возвращает строку, которая отформатирована с помощью тегов html, которые вы можете отправить в Html.fromHtml (), чтобы получить выделенный текст. Добавьте ниже значение Gradle в файл градиента вашего модуля.

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