129

我想在我的TextView. 我搜索了一些内容,但找不到任何富有成果的内容。

任何人都可以在这里帮助我吗?

4

10 回答 10

342

在 TextView 中为文本添加下划线的方式有 3 种。

  1. 可跨字符串

  2. setPaintFlags(); 文本视图

  3. Html.fromHtml();

让我向您解释所有方法:

第一种方法

对于 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");

如果要穿透文本,可以参考Paint类的常量。

第三种方法

利用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"));
于 2011-11-07T06:24:32.863 回答
48

只需在您的 string.xml 资源文件中用 < u > 标签包围您的文本

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

并在您的活动/片段中

mTextView.setText(R.string.your_string);
于 2013-11-25T12:51:05.003 回答
21

它对我有用。

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
于 2014-09-11T11:17:04.917 回答
13

对于仍在查看此问题的任何人。这是一个超链接,但你可以修改它只是一个简单的下划线:

创建一个可绘制对象(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"/>
于 2015-03-16T14:35:15.967 回答
4

一个简单且可持续的解决方案是创建一个图层列表并将其作为 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>
于 2018-04-16T22:33:47.353 回答
3

如果您的 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>
于 2017-05-03T10:45:23.987 回答
3

下划线在android中的textview

在 Android 中为 TextView 下划线的 5 种惊人方法 - Kotlin/Java & XML

  1. String html = "<u>Underline using Html.fromHtml()</u>"; textview.setText(Html.fromHtml(html));

但是Html.fromHtml(String resource)在 API 24 中已被弃用。

所以你可以使用最新的 android 支持库androidx.core.text.HtmlCompat。在此之前,您需要在项目中包含依赖项。

`implementation 'androidx.core:core:1.0.1'`
  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

  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); 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);`
于 2019-08-18T04:23:54.480 回答
1

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

fun TextView.drawUnderLine() {
    val text = SpannableString(this.text.toString())
    text.setSpan(UnderlineSpan(), 0, text.length, 0)
    this.text = text
}
yourTextView.drawUnderLine()
于 2020-11-16T09:52:54.063 回答
0

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
于 2020-12-21T10:24:24.643 回答
0

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

android:autoLink="email"

同样,您可以为网站

android:autoLink="web"

此外,如果您想设置文本颜色,您可以在属性下方

android:textColorLink="@color/email_text_color"
于 2021-04-14T07:47:31.293 回答