Intereting Posts
Android-приложения, установленные как несколько значков Обычное приложение Google Polymer для Android Отключение Android при выходе из приложения Как нарисовать текст с разными штрихами и цветами заливки? Исключение при открытии оповещения обозревателя Parse Почему adb возвращается в автономный режим после строки устройства? Запретить восстановление стека активности? CustomAnimation при вызове popBackStack на FragmentManager Для каждого внутри a для каждого – Java Почему INSERT и UPDATE более медленны на Android 4.0? Переупорядочить страницы в FragmentStatePagerAdapter, используя getItemPosition (объект Object) Как решить для viewpager: указанный ребенок уже имеет родителя. Вы должны сначала вызвать removeView () родителя ребенка Изображение, сохраненное на SD-карте, не отображается в приложении «Галерея Android» Как сделать адаптер Android и adb работать на 64-битном Ubuntu без ia32-libs (работает для версий 12, 13 и 14) Как настроить цвет и текст режима действия?

Подсветка синтаксиса 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'