Я хочу нарисовать подчеркивание под моим TextView. Я просмотрел несколько материалов, но не нашел ничего полезного.
Может ли кто-нибудь помочь мне здесь?
Я хочу нарисовать подчеркивание под моим TextView. Я просмотрел несколько материалов, но не нашел ничего полезного.
Может ли кто-нибудь помочь мне здесь?
Ответы:
В TextView есть три способа выделить текст в нижнюю часть.
Позвольте мне объяснить вам все подходы:
1-й подход
Для подчеркивания текста в TextView вы должны использовать SpannableString
String udata="Underlined Text";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
mTextView.setText(content);
2-й подход
Вы можете использовать метод setPaintFlags TextView, чтобы подчеркнуть текст TextView.
Например,
mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mTextView.setText("This text will be underlined");
Вы можете ссылаться на константы класса Paint, если хотите пробиться сквозь текст.
3-й подход
Использовать Html.fromHtml(htmlString);
String htmlString="<u>This text will be underlined</u>";
mTextView.setText(Html.fromHtml(htmlString));
ИЛИ
txtView.setText(Html.fromHtml("<u>underlined</u> text"));
Html.fromHtml("<u>This text will be underlined</u>"), но я должен признать, что я гораздо больший поклонник использования SpannableStrings. @Kartik: Вы также можете использовать a StrikethroughSpanв тексте, чтобы создать эффект зачеркивания. :)
просто окружите свой текст тегом <u> в файле ресурсов string.xml
<string name="your_string"><u>Underlined text</u></string>
и в вашей деятельности / фрагменте
mTextView.setText(R.string.your_string);
textView.setText(getString(R.string.text)) <- неправильно . Правильно: textView.setText(getText(R.string.text)) или просто textView.setText(R.string.text). Причина beind это , что getText()возвращается Spannableс подчеркиванием пролетов, но если вы используете getString()это будет конвертировать Spannableв Stringрезультате пролетов удаляются.
Для тех, кто все еще просматривает этот вопрос. Это для гиперссылки, но вы можете изменить ее для простого подчеркивания:
Создайте файл для рисования (hyperlink_underline.xml):
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-10dp"
android:left="-10dp"
android:right="-10dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
<stroke android:width="2dp"
android:color="#3498db"/>
</shape>
</item>
</layer-list>
Создайте новый стиль:
<style name="Hyperlink">
<item name="android:textColor">#3498db</item>
<item name="android:background">@drawable/hyperlink_underline</item>
</style>
Затем используйте этот стиль в своем TextView:
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
local:MvxBind="Text Id; Click ShowJobInfoCommand"
style="@style/HyperLink"/>
Если ваш TextView имеет фиксированную ширину, альтернативным решением может быть создание View, которое будет выглядеть как подчеркивание, и расположить его прямо под вашим TextView.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/myTextView"
android:layout_width="20dp"
android:layout_height="wrap_content"/>
<View
android:layout_width="20dp"
android:layout_height="1dp"
android:layout_below="@+id/myTextView"
android:background="#CCCCCC"/>
</RelativeLayout>
Простое и надежное решение - создать список слоев и сделать его фоном для TextView:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-5dp"
android:right="-5dp"
android:top="-5dp">
<shape>
<stroke
android:width="1.5dp"
android:color="@color/colorAccent" />
</shape>
</item>
</layer-list>
5 удивительных способов подчеркнуть текстовое поле в Android - Kotlin / Java и XML
String html = "<u>Underline using Html.fromHtml()</u>";
textview.setText(Html.fromHtml(html));Но Html.fromHtml (ресурс String) устарел в API 24.
Таким образом, вы можете использовать последнюю версию библиотеки поддержки Android androidx.core.text.HtmlCompat . Перед этим вам нужно включить зависимость в свой проект.
`implementation 'androidx.core:core:1.0.1'`
String html = "<u> 1.1 Underline using HtmlCompat.fromHtml()</u>";
//underline textview using HtmlCompat.fromHtml() method
textview11.setText(HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY));Используя strings.xml ,
<string name="underline_text">1.3 <u>Underline using HtmlCompat.fromHtml() and string resource</u></string>textview13.setText(HtmlCompat.fromHtml(getString(R.string.underline_text), HtmlCompat.FROM_HTML_MODE_LEGACY));
используя PaintFlags
textview2.setPaintFlags(textview2.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
textview2.setText("2. Underline using setPaintFlags()");с использованием SpannableString
`String content1 = "3.1 Underline using SpannableString";
SpannableString spannableString1 = new SpannableString(content1);
spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
textview31.setText(spannableString1);`