Intereting Posts
«Частный статический конечный» член тестового класса блока Android меняет значение на null Получение аппаратной плавающей запятой с помощью андроида NDK Добавление onclicklistener в listview (android) Gradle NDK для указания директивы 'include' в созданном Android.mk Пользовательский вид drawArc, обнаружение касания пользователя на пути рисования дуги Нажатие на Android Notification Actions не закрывает ящик уведомлений Как изменить размер текста в RemoteViews Тип ошибки 3. Класс активности {com.awesome_project / com.awesome_project.MainActivity} не существует в реакции native (Android-устройство) Как выделить несколько элементов в представлении списка? Как передать целое число из одной активности в другую? Изменение цвета кнопки при наведении Ошибка: не удалось найти компонент акустической системы «ionic-platform-web-client» Как создать пользовательский интерфейс Google + в виде списка? Как общаться с сервером без подключения к Интернету? Как получить доступ к существующей базе данных sqlite в Android Emulator?

Указание «зачеркивания» в разделе текста TextView

У меня есть блок текста, исходящий из веб-службы, и в зависимости от некоторых тегов, которые я предопределил, я хочу стилизовать текст, прежде чем устанавливать его в свой TextView. Для полужирного, курсива и подчеркивания я смог сделать это легко с помощью команды replaceAll:

PageText = PageText.replaceAll("\\*([a-zA-Z0-9]+)\\*", "<b>$1</b>"); PageText = PageText.replaceAll("=([a-zA-Z0-9]+)=", "<i>$1</i>"); PageText = PageText.replaceAll("_([a-zA-Z0-9]+)_", "<u>$1</u>"); txtPage.setText(Html.fromHtml(PageText), TextView.BufferType.SPANNABLE); 

Итак, чтобы смело произнести слово, окружайте его *, для курсива, окружайте с помощью _.

Но, для зачеркивания, Html.fromHtml не поддерживает тег «strike», поэтому это невозможно сделать таким же образом. Я видел примеры использования Spannable для установки стиля в один раздел текста, но для него требуются позиционные числа. Поэтому, я думаю, я мог бы прокручивать текст, ища – (тег, представляющий забастовку), затем поиск следующего, охватывающий текст между ними и повторяющийся для всех таких строк. В итоге это будет 10 строк кода цикла, а не 1 для других, поэтому мне интересно, есть ли более элегантное решение там.

Solutions Collecting From Web of "Указание «зачеркивания» в разделе текста TextView"

Если это просто TextView, вы можете нанести удар с помощью флагов краски

 TextView tv=(TextView) v.findViewById(android.R.id.text1); tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 

Решение @Suresh работает, если вы хотите зачеркнуть весь TextView, но если вы хотите зачеркнуть только некоторые части текста, используйте код ниже.

  tvMRP.setText(text, TextView.BufferType.SPANNABLE); Spannable spannable = (Spannable) tvMRP.getText(); spannable.setSpan(new StrikethroughSpan(), 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

Здесь text – это текст, который мы хотим отобразить TextView, 3 – нет. Символов (начиная с 0), с которого начнется зачеркивание.

Вот решение, использующее пользовательский TagHandler, который вы должны передать в Html.fromHtml ().

Android: Как использовать Html.TagHandler?

Вы можете сделать это с помощью специального TagHandler такого как тот, который находится на этом вопросе SO :

 Spanned parsed = Html.fromHtml(PageText, null, new MyHtmlTagHandler()); 

И TagHandler реализует методы:

 public void handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader) { if(tag.equalsIgnoreCase("strike") || tag.equals("s")) { processStrike(opening, output); } } .... 

Вы уверены, что Html.fromHtml не поддерживает <strike> ? Он указан в этом сообщении блога Commonsware

Похоже, он не поддерживается, по крайней мере, он не работает на Android 3.1.

@ RMS2, если текст мал, вы можете разделить его на два или три отдельных текстовых вида и применить флаг только к тому, который вы хотите, не идеально подходит для длинных текстов;