Как установить подчеркивание текста при просмотре текста? - PullRequest
34 голосов
/ 13 апреля 2011

Есть ли какие-нибудь идеи по этому поводу, как установить подчеркивание текста в текстовом представлении? если да, скажите, пожалуйста.

Я использовал следующий код, но он не работает.

tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>").toString());

Заранее спасибо

Ответы [ 11 ]

72 голосов
/ 13 апреля 2011

Вы должны использовать SpannableString для этого:

String mystring=new String("Hello.....");
SpannableString content = new SpannableString(mystring);
content.setSpan(new UnderlineSpan(), 0, mystring.length(), 0);
yourtextview.setText(content);

Обновление: мой ответ можно найти на Underling TextView здесь всеми возможными способами.

47 голосов
/ 29 августа 2016

Ниже приведены некоторые подходы для подчеркнутого текста в Android:

1-й подход

Вы можете определить свою строку в strings.xml

<string name="your_string"><u>Underlined text</u></string>

И используйте эту строку в вашем xml файле

<TextView
            android:id="@+id/txt_underlined"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/your_string"/>

или , вы можете использовать эту строку в своей Деятельности / Фрагменте

txtView.setText(R.string.your_string);

2-й подход

Чтобы подчеркнуть текст в TextView, вы можете использовать SpannableString

String text="Underlined Text";
SpannableString content = new SpannableString(text);
content.setSpan(new UnderlineSpan(), 0, text.length(), 0);
txtView.setText(content);

3-й подход

Вы можете использоватьsetPaintFlags метод TextView для подчеркивания текста TextView.

txtView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
txtView.setText("Underlined Text");

4-й подход

Используйте Html.fromHtml(htmlString);

String htmlString="<u>Underlined Text</u>";
txtView.setText(Html.fromHtml(htmlString));

Или

txtView.setText(Html.fromHtml("<u>underlined</u> text"));

Примечание:

Если вы добавили эту строку android:textAllCaps="true" в свой макет, то ничего из вышеперечисленного не будет работать,Для этого вам нужно определить вашу строку в Caps, а затем любой из вышеперечисленных подходов.

43 голосов
/ 21 марта 2013

Используйте это

tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
8 голосов
/ 15 июля 2013

Android поддерживает форматирование строк с использованием тегов HTML в строках xml. Таким образом, будет работать следующее:

<string name="label_testinghtmltags"><u>This text has an underscore</u></string>

Тогда вы просто используете его, как обычно. Вы можете увидеть больше в документации здесь

Обновление:

Чтобы дополнительно расширить ответ, документация гласит:

... методы format(String, Object...) и getString(int, Object...) удаляют всю информацию о стиле из строки. , Обходным путем является написание HTML-тегов с экранированными сущностями, которые затем восстанавливаются с помощью fromHtml (String) после форматирования

Например, результирующая строка из следующего фрагмента кода не будет отображаться как содержащая подчеркнутые элементы:

<string name="html_bold_test">This <u>%1$s</u> has an underscore</string>
String result = getString(R.string.html_bold_test, "text")

Однако результат из следующего фрагмента будет содержать подчеркивания:

<string name="html_bold_test">This &lt;u> %1$s &lt;/u> has an underscore</string>
String result = Html.fromHtml(getString(R.string.html_bold_test, "text"))
6 голосов
/ 11 сентября 2014

Попробуйте это,

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
6 голосов
/ 06 сентября 2012

вы почти у цели: просто не вызывайте toString() на Html.fromHtml(), и вы получите Spanned Object, который выполнит эту работу;)

tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>"));
4 голосов
/ 29 января 2013

Не нужно использовать свойства HTML, давайте сосредоточимся на Java XD У меня была такая же проблема, я нашел способ сделать это в Java:

String text="Hide post";
TextView tvHide=(TextView)findViewById(R.id.text);
SpannableString spanString = new SpannableString(text);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
tvHide.setText(spanString );
1 голос
/ 06 марта 2019

Простой и удобный способ отображения подчеркивания в TextView:

yourTextView.getPaint().setUnderlineText(true);

И если вы хотите удалить подчеркивание для этого представления, вы можете написать ниже код:

yourTextView.getPaint().setUnderlineText(false);

Это будет работать, даже если вы установите android:textAllCaps="true"

1 голос
/ 13 апреля 2011

Вы можете сделать это как:

tvHide.setText(Html.fromHtml("<p><span style='text-decoration: underline'>Hide post</span></p>").toString());

Надеюсь, это поможет

1 голос
/ 13 апреля 2011

Я считаю, что вам нужно использовать CharSequence . Вы можете найти пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...