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

Nir*_*odh 37 android textview

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

我使用了以下代码,但它不起作用.

tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>").toString());
Run Code Online (Sandbox Code Playgroud)

提前致谢

Kar*_*iya 76

您必须使用SpannableString:

String mystring=new String("Hello.....");
SpannableString content = new SpannableString(mystring);
content.setSpan(new UnderlineSpan(), 0, mystring.length(), 0);
yourtextview.setText(content);
Run Code Online (Sandbox Code Playgroud)

更新:您可以通过各种方式参考我在这里的 Underling TextView的答案.


aks*_*hay 53

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

第一种方法

您可以在中定义字符串 strings.xml

<string name="your_string"><u>Underlined text</u></string>
Run Code Online (Sandbox Code Playgroud)

并在您的xml文件中使用该字符串

<TextView
            android:id="@+id/txt_underlined"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/your_string"/>
Run Code Online (Sandbox Code Playgroud)

或者您可以在Activity/Fragment中使用该字符串

txtView.setText(R.string.your_string);
Run Code Online (Sandbox Code Playgroud)

第二种方法

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

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

第三种方法

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

txtView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
txtView.setText("Underlined Text");
Run Code Online (Sandbox Code Playgroud)

第四种方法

利用Html.fromHtml(htmlString);

String htmlString="<u>Underlined Text</u>";
txtView.setText(Html.fromHtml(htmlString));
Run Code Online (Sandbox Code Playgroud)

要么

txtView.setText(Html.fromHtml("<u>underlined</u> text"));
Run Code Online (Sandbox Code Playgroud)

注意:

如果您android:textAllCaps="true"在布局中添加了这一行,那么以上都不会起作用.为此,您必须在Caps中定义字符串,然后使用上述任何方法.

  • 谢谢,就我而言,我使用的是 android:textAllCaps="true"。由于下划线不起作用。 (2认同)

小智 45

用这个

tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Run Code Online (Sandbox Code Playgroud)

  • 删除下划线怎么样? (2认同)

Hra*_*afn 8

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

<string name="label_testinghtmltags"><u>This text has an underscore</u></string>
Run Code Online (Sandbox Code Playgroud)

然后你就像平常一样使用它.您可以在此处的文档中查看更多内容

更新:

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

... 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")
Run Code Online (Sandbox Code Playgroud)

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

<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"))
Run Code Online (Sandbox Code Playgroud)


Mob*_*ent 6

你几乎就在那里:只是不要打电话toString()Html.fromHtml()你,你会得到一个可以完成工作的跨物体;)

tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>"));
Run Code Online (Sandbox Code Playgroud)


man*_*ani 6

试试这个,

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
Run Code Online (Sandbox Code Playgroud)


She*_*uky 5

不需要使用 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 );
Run Code Online (Sandbox Code Playgroud)


Vir*_*tel 5

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

yourTextView.getPaint().setUnderlineText(true);
Run Code Online (Sandbox Code Playgroud)

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

yourTextView.getPaint().setUnderlineText(false);

即使你设置了它也会工作 android:textAllCaps="true"


Bok*_*ken 5

Kotlin - 普通代码

val text = getString(R.string.welcome)

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

text_view.text = spannableString
Run Code Online (Sandbox Code Playgroud)

Kotlin - 扩展

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

    setText(spannableString)
}
Run Code Online (Sandbox Code Playgroud)

用法:

text_view.underline(R.string.welcome)
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

用法:

<TextView
    android:id="@+id/tv_report_problem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:underline="@{@string/common_report_problem}" />
Run Code Online (Sandbox Code Playgroud)