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


Answers:


323

在TextView中有三种在文本下划线的方法。

  1. SpannableString

  2. setPaintFlags(); TextView的

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

1
很高兴听到这个消息。将这个问题标记为已解决,以便其他用户可以参考。
2011年

4
第三种方法是使用Html.fromHtml("<u>This text will be underlined</u>"),但我必须承认我是使用SpannableStrings的忠实粉丝。@Kartik:您最好StrikethroughSpan在文本上使用a 来创建删除线效果。:)
MH。

喜欢第三种方法。简短,简洁,简洁,仅在我的程序中增加了一行代码。
马特

我知道这有点旧,但是有没有办法设置下划线的粗细?
Andreas Wong 2013年

在PreferenceCategory中,哪一个用于preferenceActivity内容?
android开发人员

40

仅在string.xml资源文件中用<u>标记括住文本

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

在您的活动/片段中

mTextView.setText(R.string.your_string);

7
@CHAKRAVARTHI,如果在设置之前将文本强制转换为字符串,它将无法正常工作。例如textView.setText(getString(R.string.text)) <-错误正确: textView.setText(getText(R.string.text))或者textView.setText(R.string.text)。原因是此命令getText()返回Spannable带下划线的跨度,但如果使用getString()它,则会将转换为SpannableString删除的结果跨度。
Yaroslav Mytkalyk,2014年

好点子!为了更清楚地说明,我已经编辑了当前答案
Sarpe 2014年

19

它对我有用。

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);

11

对于仍然在看这个疑问的人。这是用于超链接的,但是您可以将其修改为仅显示以下划线:

创建一个可绘制对象(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"/>

3

如果您的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>

2

一个简单而可持续的解决方案是创建一个图层列表,并将其作为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>

2
如果它是单行
文本视图,

0

在android中给textview下划线

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

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

但是在API 24中不推荐使用Html.fromHtml(String resource)

因此,您可以使用最新的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);`
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.