Привет, я попробовал приведенный выше код ресурса XML, и он не работает. он продолжал отображать <u> подчеркивание </ u> в виде простого текста
Джонатан
4
Смотрите также: android.text.Html.fromHtml (), который возвращает Spanned.
Марк Ренуф
3
Вы должны напечатать его в самом файле strings.xml, не делая это кнопкой добавления. В противном случае вы получите это & lt; u & gt; в вашем файле strings.xml и <u> подчеркивания </ u> в вашем коде
gdrt
3
Я сталкивался со случаями, когда нижележащие <u>теги не работают, например, иногда, если вы используете собственный шрифт. Тем не менее, программная UnderlineSpanоснова до сих пор на мне не сработала, поэтому я бы рекомендовал это как наиболее надежное решение.
Джулио Пьянкастелли
26
Он не будет отображаться в редакторе, но при запуске приложения - будет подчеркнут.
Будьте осторожны, если вы используете пользовательские шрифты или аналогичные, вам может понадобиться, | Paint.ANTI_ALIAS_FLAGили ваш текст будет выглядеть очень резким. Это проявляется в более низких API чаще, чем нет.
Мартин Маркончини,
4
В Котлине:textView.paintFlags = textView.paintFlags or Paint.UNDERLINE_TEXT_FLAG
Альберт Вила Кальво
72
«Принятый» ответ выше НЕ работает (когда вы пытаетесь использовать строку вроде textView.setText(Html.fromHtml(String.format(getString(...), ...))).
Как указано в документации, вы должны экранировать (в кодировке html-сущности) открывающую скобку внутренних тегов <, например, результат должен выглядеть следующим образом:
<resource><stringname="your_string_here">This is an <u>underline</u>.</string></resources>
Затем в вашем коде вы можете установить текст с помощью:
<u> подчеркнуто здесь </ u> работает отлично. & lt; u> подчеркивание & lt; / u> не работает. Это для Android 2.2. Возможно разные версии интерпретируют это по-разному.
user898763452
@autotravis какой для 2.2? Я не проверял его на более старых версиях, и будет весьма прискорбно, если разные версии будут обрабатывать его по-разному ... Также, по крайней мере, в текущей документации говорится, что его нужно экранировать (ссылка в ответе).
Огнян
Я протестировал <u> подчеркнутый </ u> на Android 2.3, и это работает. & lt; u> подчеркивание & lt; / u> не работает для 2.3. Документы говорят: «Иногда вам может понадобиться создать стилизованный текстовый ресурс, который также используется в качестве строки формата. Обычно это не работает, потому что метод String.format (String, Object ...) удалит всю информацию о стиле из строки. Обходным путем является написание HTML-тегов с экранированными сущностями, которые затем восстанавливаются с помощью fromHtml (String) после форматирования. " Поэтому я думаю, что вы бы использовали экранирование, если бы запускали его через этот метод String.format (...).
user898763452
@autotravis Да, вы правы. Я использую это с String.format (...). Я отредактировал свой ответ, спасибо за ваш отзыв.
Огнян
На 2.3 и 4.1 (только те, которые я пробовал до сих пор) вы можете просто использовать textView.setText (getText (R.string.text)) вместо необходимости использовать getString (), Html.fromHtml () и String.format ().
Рой Солберг
59
Содержимое файла Strings.xml:
<resource><stringname="my_text">This is an <u>underline</u>.</string></resources>
Файл макета XML должен использовать указанный выше строковый ресурс со следующими свойствами textview, как показано ниже:
Убедитесь, что вы редактируете файл строковых ресурсов внутри фактического XML, а не внутри пользовательского интерфейса вспомогательного редактирования в Eclipse, поскольку он будет экранировать <s.
Внешний вид Widget.AppCompat.Button.Borderless.Colored намного лучше, чем подчеркивание, однако, как описал @Kiril Vashilo, вы все равно можете это сделать.
xarlymg89
11
Самый последний подход к рисованию подчеркнутого текста описан Romain Guy на носителе с доступным исходным кодом на GitHub . В этом примере приложения представлены две возможные реализации:
Реализация на основе пути, которая требует уровня API 19
Региональная реализация, которая требует уровня API 1
Я знаю, что это поздний ответ, но я нашел решение, которое работает довольно хорошо ... Я взял ответ от Энтони Форлони за подчеркивание текста в коде и создал подкласс TextView, который обрабатывает это для вас. Тогда вы можете просто использовать подкласс в XML всякий раз, когда вам нужен подчеркнутый TextView.
Теперь ... всякий раз, когда вы хотите создать подчеркнутое текстовое представление в XML, вы просто делаете следующее:
<com.your.package.name.UnderlineTextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:gravity="center"android:text="This text is underlined"android:textColor="@color/blue_light"android:textSize="12sp"android:textStyle="italic"/>
Я добавил дополнительные опции в этот фрагмент XML, чтобы показать, что мой пример работает с изменением цвета, размера и стиля текста ...
Хотя этот пример работает, я быстро понял, что если вы когда-нибудь захотите иметь дополнительный контроль в XML, чего просто не будет ... Я переключился на лучшее решение, включающее следующие шаги: 1) Текстовое представление подкласса 2) Добавить поддержку подчеркнуть текст с помощью пользовательских атрибутов, чтобы подчеркнуть, как указано выше. Единственное отличие состоит в том, что вы выполняете код подчеркивания, только если установлен пользовательский атрибут.
Джастин
10
Более чистый способ вместо textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
метода заключается в использовании
textView.getPaint().setUnderlineText(true);
И если вам нужно позже отключить подчеркивание для этого представления, например, в повторно используемом представлении в RecyclerView, textView.getPaint().setUnderlineText(false);
Это идеальное решение для подчеркивания всех видов с использованием собственного цвета. не пренебрегайте прозрачным фоном здесь, для андроида 4 это обязательно, ваш взгляд будет иметь черный фон без него
Ответ с наибольшим количеством голосов является правильным и самым простым. Однако иногда вы можете обнаружить, что не работает с одним шрифтом, но работает с другими (с какой проблемой я столкнулся при работе с китайским).
Решение состоит в том, чтобы не использовать «WRAP_CONTENT» только для вашего TextView, потому что нет места для рисования линии. Вы можете установить фиксированную высоту для вашего TextView или использовать android: paddingVertical с WRAP_CONTENT.
Уже довольно поздно ответить на этот вопрос, но предположим, что если кто-то хочет получить текст динамически, он может использовать эту простую строку в своем коде Java, который работает:
У меня была проблема, когда я использую пользовательский шрифт и подчеркивание, созданное с помощью трюка файла ресурсов (<u>Underlined text</u> ), сработало, но Android удалось преобразовать подчеркивание в своего рода ударную впадину.
Я использовал этот ответ, чтобы нарисовать границу под видом текста: https://stackoverflow.com/a/10732993/664449 . Очевидно, что это не работает для частично подчеркнутого текста или многослойного текста.
Ответы:
Этого можно достичь, если вы используете XML-файл строковых ресурсов , который поддерживает HTML-теги, такие как
<b></b>
,<i></i>
и<u></u>
.Если вы хотите подчеркнуть что-то из кода, используйте:
источник
<u>
теги не работают, например, иногда, если вы используете собственный шрифт. Тем не менее, программнаяUnderlineSpan
основа до сих пор на мне не сработала, поэтому я бы рекомендовал это как наиболее надежное решение.Вы можете попробовать с
источник
| Paint.ANTI_ALIAS_FLAG
или ваш текст будет выглядеть очень резким. Это проявляется в более низких API чаще, чем нет.textView.paintFlags = textView.paintFlags or Paint.UNDERLINE_TEXT_FLAG
«Принятый» ответ выше НЕ работает (когда вы пытаетесь использовать строку вроде
textView.setText(Html.fromHtml(String.format(getString(...), ...)))
.Как указано в документации, вы должны экранировать (в кодировке html-сущности) открывающую скобку внутренних тегов
<
, например, результат должен выглядеть следующим образом:Затем в вашем коде вы можете установить текст с помощью:
источник
Содержимое файла Strings.xml:
Файл макета XML должен использовать указанный выше строковый ресурс со следующими свойствами textview, как показано ниже:
источник
Для Button и TextView это самый простой способ:
Кнопка:
TextView:
источник
Одноканальное решение
myTextView.setText(Html.fromHtml("<p><u>I am Underlined text</u></p>"));
Это немного поздно, но может быть полезно для кого-то.
источник
В Kotlin можно использовать функцию расширения . Это можно использовать только из кода, а не из XML.
Применение:
источник
проверьте подчеркнутый стиль нажимаемой кнопки:
strings.xml:
Результат:
источник
Самый последний подход к рисованию подчеркнутого текста описан Romain Guy на носителе с доступным исходным кодом на GitHub . В этом примере приложения представлены две возможные реализации:
источник
Я знаю, что это поздний ответ, но я нашел решение, которое работает довольно хорошо ... Я взял ответ от Энтони Форлони за подчеркивание текста в коде и создал подкласс TextView, который обрабатывает это для вас. Тогда вы можете просто использовать подкласс в XML всякий раз, когда вам нужен подчеркнутый TextView.
Вот класс, который я создал:
Теперь ... всякий раз, когда вы хотите создать подчеркнутое текстовое представление в XML, вы просто делаете следующее:
Я добавил дополнительные опции в этот фрагмент XML, чтобы показать, что мой пример работает с изменением цвета, размера и стиля текста ...
Надеюсь это поможет!
источник
Более чистый способ вместо
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
метода заключается в использованииtextView.getPaint().setUnderlineText(true);
И если вам нужно позже отключить подчеркивание для этого представления, например, в повторно используемом представлении в RecyclerView,
textView.getPaint().setUnderlineText(false);
источник
Просто используйте атрибут в файле строкового ресурса, например
источник
Я использовал этот XML-объект для рисования, чтобы создать нижнюю границу, и применил его в качестве фона для моего текстового представления.
источник
Простое и гибкое решение в xml:
источник
Другое решение заключается в создании пользовательского представления, расширяющего TextView, как показано ниже.
и просто добавьте в XML, как показано ниже
источник
Я упростил ответ Самуила :
источник
Я создал этот метод для простоты
Подчеркните весь TextView
Подчеркните некоторую часть TextView
проверьте мой ответ здесь, чтобы сделать кликабельный подчеркнутый текст или подчеркнуть несколько частей TextView
источник
попробуй этот код
в XML
в коде
Удачи!
источник
Кроме того, следующий код не будет печатать подчеркивание:
Вместо этого используйте следующий код для сохранения расширенного текстового формата:
«Вы можете использовать getString (int) или getText (int) для извлечения строки. GetText (int) сохраняет любые стили расширенного текста, примененные к строке». Android документация.
Обратитесь к документации: https://developer.android.com/guide/topics/resources/string-resource.html
Надеюсь, это поможет.
источник
Ответ с наибольшим количеством голосов является правильным и самым простым. Однако иногда вы можете обнаружить, что не работает с одним шрифтом, но работает с другими (с какой проблемой я столкнулся при работе с китайским).
Решение состоит в том, чтобы не использовать «WRAP_CONTENT» только для вашего TextView, потому что нет места для рисования линии. Вы можете установить фиксированную высоту для вашего TextView или использовать android: paddingVertical с WRAP_CONTENT.
источник
Обратите внимание на символ Escape в файле XML
источник
Для этого в Котлине:
yourTextView.paint?.isUnderlineText = true
источник
Уже довольно поздно ответить на этот вопрос, но предположим, что если кто-то хочет получить текст динамически, он может использовать эту простую строку в своем коде Java, который работает:
источник
У меня была проблема, когда я использую пользовательский шрифт и подчеркивание, созданное с помощью трюка файла ресурсов (
<u>Underlined text</u>
), сработало, но Android удалось преобразовать подчеркивание в своего рода ударную впадину.Я использовал этот ответ, чтобы нарисовать границу под видом текста: https://stackoverflow.com/a/10732993/664449 . Очевидно, что это не работает для частично подчеркнутого текста или многослойного текста.
источник