如何在textview上设置下划线文本?

时间:2011-04-13 07:25:49

标签: android textview

关于这一点的任何身体想法,如何在textview上设置下划线文字? 如果是,请告诉。

我使用了以下代码,但它无效。

tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>").toString());

提前致谢

13 个答案:

答案 0 :(得分:71)

您必须使用SpannableString

String mystring=new String("Hello.....");
SpannableString content = new SpannableString(mystring);
content.setSpan(new UnderlineSpan(), 0, mystring.length(), 0);
yourtextview.setText(content);

更新:您可以通过各种方式在Underling TextView的here上引用我的答案。

答案 1 :(得分:43)

使用此

tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

答案 2 :(得分:42)

以下是android中带下划线的文本的一些方法:

第一种方法

您可以在<table style="width:100%"> <tr> <th>Firstname</th> <td><input...></td> </tr> <tr> <th>Lastname</th> <td><input...></td> </tr> </table>

中定义字符串
strings.xml

<string name="your_string"><u>Underlined text</u></string> 文件中使用该字符串

xml

您可以在“活动/片段”中使用该字符串

<TextView
            android:id="@+id/txt_underlined"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/your_string"/>

第二种方法

要在TextView中为文本加下划线,可以使用SpannableString

txtView.setText(R.string.your_string);

第3种方法

您可以使用TextView的setPaintFlags方法为TextView的文本加下划线。

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

第4种方法

利用txtView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); txtView.setText("Underlined Text"); ;

Html.fromHtml(htmlString)

String htmlString="<u>Underlined Text</u>";
txtView.setText(Html.fromHtml(htmlString));

注意:

如果您在布局中添加了此行txtView.setText(Html.fromHtml("<u>underlined</u> text")); ,那么以上都不会有效。为此,您必须在Caps中定义您的字符串,然后是上述任何一种方法。

答案 3 :(得分:8)

Android支持使用字符串xml中的 HTML 标记进行字符串格式设置。所以以下方法可行:

<string name="label_testinghtmltags"><u>This text has an underscore</u></string>

然后你就像平常一样使用它。您可以在文档here

中查看更多内容

<强>更新

为了进一步扩展答案,documentation说:

  

... format(String, Object...)getString(int, Object...)方法从字符串中删除所有样式信息。 。解决这个问题的方法是使用转义实体编写HTML标记,然后在格式化后使用fromHtml(String)恢复

例如,以下代码段中的结果字符串显示为包含下划线元素:

<string name="html_bold_test">This <u>%1$s</u> has an underscore</string>
String result = getString(R.string.html_bold_test, "text")

但是,以下代码段的结果将包含下划线:

<string name="html_bold_test">This &lt;u> %1$s &lt;/u> has an underscore</string>
String result = Html.fromHtml(getString(R.string.html_bold_test, "text"))

答案 4 :(得分:6)

你几乎就在那里:只是不要在toString()上拨打Html.fromHtml()并获得一个可以完成工作的跨区对象;)

tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>"));

答案 5 :(得分:6)

试试这个,

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);

答案 6 :(得分:4)

不需要使用HTML属性,让我们专注于java xD 我有同样的问题,我找到了在java中的方法:

String text="Hide post";
TextView tvHide=(TextView)findViewById(R.id.text);
SpannableString spanString = new SpannableString(text);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
tvHide.setText(spanString );

答案 7 :(得分:1)

我相信您需要使用CharSequence。您可以找到示例here

答案 8 :(得分:1)

你可以这样做:

tvHide.setText(Html.fromHtml("<p><span style='text-decoration: underline'>Hide post</span></p>").toString());

希望这有帮助

答案 9 :(得分:1)

TextView中显示下划线的简单方法是:

yourTextView.getPaint().setUnderlineText(true);

如果要删除该视图的下划线,则可以编写以下代码:

yourTextView.getPaint().setUnderlineText(false);

即使您设置了android:textAllCaps="true"

答案 10 :(得分:1)

您可以轻松地添加一个高度为1dp的View,将其正下方对齐TextView的开始和结尾。您还可以将marginTop与负值一起使用,以使下划线更接近TextView。如果在相对布局中使用TextView和under,则对齐会容易得多。这是示例:

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<View
  android:id="@+id/viewForgotPasswordUnderline"
  android:layout_width="wrap_content"
  android:layout_height="1dp"
  android:layout_below="@id/txtForgotPassword"
  android:layout_alignStart="@id/txtForgotPassword"
  android:layout_alignEnd="@id/txtForgotPassword"
  android:layout_marginTop="-2dp"
  android:background="@color/lightGray" />

<androidx.appcompat.widget.AppCompatTextView
  android:id="@+id/txtForgotPassword"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_centerHorizontal="true"
  android:paddingTop="8dp"
  android:text="@string/userLoginForgotPassword"
  android:textColor="@color/lightGray"
  android:textSize="16dp" />
</RelativeLayout>

答案 11 :(得分:1)

Kotlin - 普通代码

val text = getString(R.string.welcome)

val spannableString = SpannableString(text).apply {
    setSpan(UnderlineSpan(), 0, text.length, 0)
}

text_view.text = spannableString

科特林 - 扩展

fun TextView.underline(resource: Int) {
    val text = context.getString(resource)
    val spannableString = SpannableString(text).apply {
        setSpan(UnderlineSpan(), 0, text.length, 0)
    }

    setText(spannableString)
}

用法:

text_view.underline(R.string.welcome)

Kotlin - 绑定代码

@BindingAdapter("underline")
fun underline(view: TextView, resource: Int) {
    if (resource == 0) return

    val text = view.context.getString(resource)
    val spannableString = SpannableString(text).apply {
        setSpan(UnderlineSpan(), 0, text.length, 0)
    }

    view.text = spannableString
}

用法:

<TextView
    android:id="@+id/tv_report_problem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:underline="@{@string/common_report_problem}" />

答案 12 :(得分:0)

在我的sign_in.xml文件中,我使用了以下代码:

<Button
    android:id="@+id/signuptextlinkbtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:background="@android:color/transparent"
    android:onClick="performSingUpMethod"
    android:text="Sign up now!"
    android:textColor="#5B55FF"
    android:textSize="15dp"
    android:textStyle="bold" />

在我的SignIn.java文件中,我使用了以下代码:

import android.graphics.Paint;
Button signuptextlinkbutton = (Button) findViewById(R.id.signuptextlinkbtn);
signuptextlinkbutton.setPaintFlags(signuptextlinkbutton.getPaintFlags()| Paint.UNDERLINE_TEXT_FLAG);

现在,我可以看到带下划线的链接。甚至我以为我将其声明为Button都只是文本。