如何在textview上设置下划线文本?
Posted
技术标签:
【中文标题】如何在textview上设置下划线文本?【英文标题】:How to set underline text on textview? 【发布时间】:2011-08-04 11:38:52 【问题描述】:如何在textview
上设置下划线文字?
我使用了以下代码,但它不起作用。
tvHide.setText(html.fromHtml("<p><u>Hide post</u></p>").toString());
【问题讨论】:
解决这个问题的三种方法***.com/questions/2394935/… Can I underline text in an android layout?的可能重复 这不是这两个问题的重复,因为 OP 要求在 textview 下划线,而不是文本本身。否则,他的问题标题需要更改。换句话说,即使 textview 是空的,它仍然应该有下划线.. 将其视为仅在底部的边框,但始终存在。 5 Amazing Ways To UnderLine A TextView In Android 【参考方案1】:您必须为此使用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 上的回答。
【讨论】:
只想在此处添加一条注释:在设置跨度时,请确保您没有使用 textAllCaps = true。它不会起作用。 在需要标志时避免给出简单的“0”,在大多数情况下Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
是要走的路。【参考方案2】:
我相信你需要使用CharSequence。你可以找到一个例子here。
【讨论】:
【参考方案3】:你可以这样做:
tvHide.setText(Html.fromHtml("<p><span style='text-decoration: underline'>Hide post</span></p>").toString());
希望对你有帮助
【讨论】:
【参考方案4】:你快到了:只是不要在Html.fromHtml()
上调用toString()
,你会得到一个可以完成这项工作的跨区对象;)
tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>"));
【讨论】:
【参考方案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 );
【讨论】:
【参考方案6】:使用这个
tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
【讨论】:
去掉那个下划线怎么样? 这感觉比 SpannableString 解决方案更简洁。我想知道,设置此绘制标志是否只是表明系统应该处理 SpannableString 设置,还是发生了完全不同的事情? 这不适用于多行的 TextView。至少对我来说。 @PratikButani 禁用:tvHide.setPaintFlags(0);【参考方案7】: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) 恢复这些标记
例如,以下代码 sn-p 生成的字符串将不显示为包含下划线元素:
<string name="html_bold_test">This <u>%1$s</u> has an underscore</string>
String result = getString(R.string.html_bold_test, "text")
但是,以下 sn-p 的结果将包含下划线:
<string name="html_bold_test">This <u> %1$s </u> has an underscore</string>
String result = Html.fromHtml(getString(R.string.html_bold_test, "text"))
【讨论】:
@BariqDharmawan 我用文档中的信息扩展了答案。也许这可以解决您的问题。【参考方案8】:试试这个,
tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
【讨论】:
【参考方案9】:以下是android中下划线文本的一些方法:
第一种方法
你可以在strings.xml
中定义你的字符串
<string name="your_string"><u>Underlined text</u></string>
并在您的xml
文件中使用该字符串
<TextView
android:id="@+id/txt_underlined"
android:layout_
android:layout_
android:text="@string/your_string"/>
或者您可以在 Activity/Fragment 中使用该字符串
txtView.setText(R.string.your_string);
第二种方法
要在TextView中给文字加下划线,可以使用SpannableString
String text="Underlined Text";
SpannableString content = new SpannableString(text);
content.setSpan(new UnderlineSpan(), 0, text.length(), 0);
txtView.setText(content);
第三种方法
可以利用TextView的setPaintFlags方法给TextView的文字加下划线。
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"));
注意:
如果您在布局中添加了这一行 android:textAllCaps="true"
,那么以上都不起作用。为此,您必须在 Caps 中定义您的字符串,然后使用上述任何一种方法。
【讨论】:
这个问题的最佳和完整答案 谢谢,就我而言,我使用的是 android:textAllCaps="true"。由于哪个下划线不起作用。 改变下划线高度的方法?【参考方案10】:在TextView
中显示下划线的简单方法是:
yourTextView.getPaint().setUnderlineText(true);
如果你想删除那个视图的下划线,你可以写下面的代码:
yourTextView.getPaint().setUnderlineText(false);
即使您设置了android:textAllCaps="true"
,它也会起作用
【讨论】:
【参考方案11】:在我的sign_in.xml
文件中,我使用了这个:
<Button
android:id="@+id/signuptextlinkbtn"
android:layout_
android:layout_
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
。
【讨论】:
【参考方案12】:您可以轻松地添加一个高度为 1dp 的视图,对齐起点和终点的 TextView,就在它的正下方。您还可以使用负值的 marginTop 使下划线更接近 TextView。如果您在相对布局中使用 TextView 和 under ,则对齐会容易得多。这是一个例子:
<RelativeLayout
android:layout_
android:layout_>
<View
android:id="@+id/viewForgotPasswordUnderline"
android:layout_
android:layout_
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_
android:layout_
android:layout_centerHorizontal="true"
android:paddingTop="8dp"
android:text="@string/userLoginForgotPassword"
android:textColor="@color/lightGray"
android:textSize="16dp" />
</RelativeLayout>
【讨论】:
【参考方案13】:Kotlin - 普通代码
val text = getString(R.string.welcome)
val spannableString = SpannableString(text).apply
setSpan(UnderlineSpan(), 0, text.length, 0)
text_view.text = spannableString
Kotlin - 扩展
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_
android:layout_
app:underline="@@string/common_report_problem" />
【讨论】:
以上是关于如何在textview上设置下划线文本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在android中创建带有下划线文本的Textview [重复]
如何在 Android TextView 中将字体样式设置为粗体、斜体和下划线?