在 Android 中的 TextView 下面绘制下划线

我想在我的 TextView下面画下划线。我搜索了一些内容,但没有找到任何有用的东西。

有人能帮帮我吗?

160088 次浏览

在 TextView 中,有三种方法在文本下面加下划线。

  1. SpannableString

  2. TextView 的 setPaintFlags () ;

  3. 来自 Html () ;

让我给你解释一下所有的方法:

第一次进场

要在 TextView 中的文本下划线,必须使用 SpannableString

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

第二次进场

可以使用 TextView 的 SetPaintFlags方法在 TextView 的文本下划线。

为了..。

mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mTextView.setText("This text will be underlined");

如果您想要通过文本删除,您可以引用 油漆类的常量。

第三种方法

利用 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"));

只需在 string.xml 资源文件中用 < u > 标记包围文本即可

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

以及你的活动/片段

mTextView.setText(R.string.your_string);

对我有用。

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);

对于任何还在关注这个问题的人来说。这是一个超链接,但你可以修改它只是一个简单的下划线:

创建一个可绘制的(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 具有固定的宽度,可选的解决方案是创建一个看起来像下划线的视图,并将其放置在 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>

underline a textview in android

Kotlin/Java & XML

  1. 字符串 html =”< u > 使用 Html.FROM Html () 下划线; SetText (Html.from Html (html)) ;

但是 From Html (字符串资源)在 API 24中被否定了。

因此,您可以使用最新的 Android 支持库 文本,HtmlCompat。在此之前,您需要在项目中包含依赖项。

`implementation 'androidx.core:core:1.0.1'`
  1. String html = “ < u > 1.1下划线,使用 HtmlCompat.from Html () ”; //使用 HtmlCompat.from Html ()方法在 textview 下划线 SetText (HtmlCompat.from Html (html,HtmlCompat.FROM _ HTML _ MODE _ LEGACY)) ;

使用 strings.xml ,

  1. <string name="underline_text">1.3 &lt;u>Underline using HtmlCompat.fromHtml() and string resource&lt;/u></string>

textview13.setText(HtmlCompat.fromHtml(getString(R.string.underline_text), HtmlCompat.FROM_HTML_MODE_LEGACY));

使用 PaintFlags

  1. Textview2.setPaintFlags (textview2.getPaintFlags () | Paint.UNDERLINE _ TEXT _ FLAG) ; 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);`

您可以使用 Kotlin 扩展并键入自己的 drawUnderLine方法。

fun TextView.drawUnderLine() {
val text = SpannableString(this.text.toString())
text.setSpan(UnderlineSpan(), 0, text.length, 0)
this.text = text
}
yourTextView.drawUnderLine()

科特林中,可以创建扩展属性:

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

如果你想下行的电子邮件地址文本,并希望打开电子邮件相关的应用程序时,用户点击该特定的电子邮件地址,那么这里是最好的办法。只需使用以下属性。

android:autoLink="email"

同样你可以为你的网站

android:autoLink="web"

另外,如果你想设置文本颜色,你可以在属性下面

android:textColorLink="@color/email_text_color"