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

时间:2011-11-07 06:20:41

标签: android textview underline

我想在TextView下方绘制下划线。我搜索了一些内容但却找不到任何有效的内容。

有人可以帮助我吗?

10 个答案:

答案 0 :(得分:291)

TextView中有三种方法可以支持文本。

  1. SpannableString

  2. TextView的setPaintFlags();

  3. Html.fromHtml();

  4. 让我向您解释所有方法:

    第一种方法

    对于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类的常量。

    第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 :(得分:37)

用&lt;文本环绕你的文字你&gt; string.xml资源文件中的标记

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

并在您的活动/片段

mTextView.setText(R.string.your_string);

答案 2 :(得分:14)

它适用于我。

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);

答案 3 :(得分:9)

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

创建一个drawable(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"/>

答案 4 :(得分:2)

一个简单而可持续的解决方案是创建一个图层列表并将其作为TextView的背景:

$imurl = "../images/sample.jpg";
$file = imagecreatefromjpeg($imurl); //http://nz2.php.net/manual/en/function.imagecreatefromjpeg.php
$rotim = imagerotate($file, 90, 0);   //http://nz2.php.net/manual/en/function.imagerotate.php      
imagejpeg($rotim, $imurl);

答案 5 :(得分:1)

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

答案 6 :(得分:0)

underline a textview in android

5 Amazing Ways To Underline A TextView In Android - Kotlin/Java & XML

  1. 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'`
  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);`

答案 7 :(得分:0)

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

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

答案 8 :(得分: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

答案 9 :(得分:0)

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

android:autoLink="email"

同样你可以为网站

android:autoLink="web"

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

android:textColorLink="@color/email_text_color"