#java #android #android_textview
Дано:
Есть HTML код, в нём текст, в тексте код, заключённый в тэг Тут код
.
Задача:
Текст внутри тэга должен иметь нужный мне цвет и определённого цвета фон.
Вопрос:
Как этого добиться, если учесть, что текст назначается (и должен продолжать назначаться)
TextView так:
textView.setText(Html.fromHtml(myAwesomeTextWithCode));
Ответы
Ответ 1
Для обработки неподдерживаемых тэгов надо передавать в качестве 3 аргумента метода Html.fromHtml экземпляр класса, расширяющего Html.TagHandler, в коем и будет происходить обработка всех неподдерживаемых на Android HTML тэгов: public class MyHtmlTagHandler implements TagHandler { @Override public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { if (tag.equalsIgnoreCase("code")) { processCode(opening, output); } } private void processCode(boolean opening, Editable output) { int len = output.length(); if (opening) { output.setSpan(new ForegroundColorSpan(Color.RED), len, len, Spanned.SPAN_MARK_MARK); output.setSpan(new BackgroundColorSpan(Color.GREEN), len, len, Spanned.SPAN_MARK_MARK); } else { Object obj = getLast(output, BackgroundColorSpan.class); int where = output.getSpanStart(obj); output.removeSpan(obj); if (where != len) { output.setSpan(new ForegroundColorSpan(Color.RED), where, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); output.setSpan(new BackgroundColorSpan(Color.GREEN), where, len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } } private static Object getLast(Spanned text, Class kind) { /* * This knows that the last returned object from getSpans() * will be the most recently added. */ Object[] objs = text.getSpans(0, text.length(), kind); if (objs.length == 0) { return null; } return objs[objs.length - 1]; } } Т.е. теперь вы можете сделать так: String myAwesomeTextWithCode = "некод-некод
"; textView.setText(Html.fromHtml(myAwesomeTextWithCode, null, new MyHtmlTagHandler()));Тут код
опять-не-код
Комментариев нет:
Отправить комментарий