#android #textview #underline
#Android #textview #подчеркивание
Вопрос:
Я хочу нарисовать подчеркивание под моим TextView
. Я просмотрел несколько материалов, но не смог найти ничего полезного.
Может ли кто-нибудь, пожалуйста, помочь мне здесь?
Ответ №1:
Есть три способа подстроить текст в 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"));
Комментарии:
1. Рад это слышать .. Отметьте этот вопрос как решенный, чтобы другие пользователи могли сослаться на него.
2. Третьим подходом было бы использование
Html.fromHtml("<u>This text will be underlined</u>")
, но я должен признать, что я гораздо больший поклонник использования SpannableStrings. @Kartik: Вы могли бы также использоватьStrikethroughSpan
в тексте для создания эффекта зачеркивания. 🙂3. Нравится 3-й подход. Короткое, простое и лаконичное и добавляет всего одну дополнительную строку кода в мою программу.
4. Я знаю, что это довольно старое, но есть ли способ установить толщину подчеркивания?
5. какой из них используется для содержимого PreferenceActivity в категории PreferenceCategory ?
Ответ №2:
просто окружите свой текст тегом < u> в вашем string.xml файл ресурсов
<string name="your_string"><u>Underlined text</u></string>
и в вашей активности / фрагменте
mTextView.setText(R.string.your_string);
Комментарии:
1.@CHAKRAVARTHI это не сработает, если вы преобразуете текст в строку перед настройкой. Например.
textView.setText(getString(R.string.text))
<- неправильно. Правильно:textView.setText(getText(R.string.text))
или простоtextView.setText(R.string.text)
. Причина в том, что этоgetText()
возвращаетSpannable
с подчеркнутыми промежутками, но если вы используетеgetString()
, это преобразуетSpannable
вString
удаляемые промежутки.2. хороший момент! Я отредактировал свой текущий ответ, чтобы быть более понятным
3. Спасибо, что поделились…. Очень удобный способ !
Ответ №3:
Это работает для меня.
tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
Ответ №4:
Для тех, кто все еще смотрит на этот вопрос. Это для гиперссылки, но вы можете изменить ее для простого подчеркивания:
Создайте чертеж (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"/>
Комментарии:
1. спасибо, это очень полезно, и я узнаю что-то новое, а атрибут top left etc, который мы можем использовать как верхнюю или боковую строку. еще раз спасибо
Ответ №5:
Простым и устойчивым решением является создание списка слоев и использование его в качестве фона вашего 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>
Комментарии:
1. Это лучший выбор, если это однострочный textview
Ответ №6:
Если ваш TextView имеет фиксированную ширину, альтернативным решением может быть создание представления, которое будет выглядеть как подчеркивание, и расположите его прямо под вашим 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>
Ответ №7:
5 удивительных способов подчеркнуть текстовое представление в Android — Kotlin/Java amp; XML
String html = "<u>Underline using Html.fromHtml()</u>";
textview.setText(Html.fromHtml(html));
Но Html.fromHtml(строковый ресурс) устарел в 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 amp;<u>Underline using HtmlCompat.fromHtml() and string resourceamp;</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);`
Ответ №8:
Вы можете использовать расширение Kotlin и ввести свой собственный drawUnderLine
метод.
fun TextView.drawUnderLine() {
val text = SpannableString(this.text.toString())
text.setSpan(UnderlineSpan(), 0, text.length, 0)
this.text = text
}
yourTextView.drawUnderLine()
Ответ №9:
В Kotlin вы можете создать свойство расширения:
inline var TextView.underline: Boolean
set(visible) {
paintFlags = if (visible) paintFlags or Paint.UNDERLINE_TEXT_FLAG
else paintFlags and Paint.UNDERLINE_TEXT_FLAG.inv()
}
get() = paintFlags and Paint.UNDERLINE_TEXT_FLAG == Paint.UNDERLINE_TEXT_FLAG
И используйте:
textView.underline = true
Ответ №10:
Если вы хотите ввести текст адреса электронной почты под строкой и хотите открыть приложение, связанное с электронной почтой, когда пользователь нажимает на этот конкретный адрес электронной почты, тогда вот лучший способ. Просто используйте свойство below.
android:autoLink="email"
Аналогично вы можете использовать для веб-сайта
android:autoLink="web"
Кроме того, если вы хотите задать цвет текста, вы можете использовать свойство ниже
android:textColorLink="@color/email_text_color"
Комментарии:
1. Я понятия не имел, что эта функция существует. Спасибо, жизнь безопаснее!