【发布时间】:2011-12-23 09:58:39
【问题描述】:
我想在我的TextView 下方画下划线。我搜索了一些内容,但没有找到任何成果。
谁能帮帮我?
【问题讨论】:
标签: android textview underline
我想在我的TextView 下方画下划线。我搜索了一些内容,但没有找到任何成果。
谁能帮帮我?
【问题讨论】:
标签: android textview underline
如果您想在电子邮件地址文本下划线并希望在用户单击该特定电子邮件地址时打开与电子邮件相关的应用程序,那么这是最好的方法。只需使用以下属性。
android:autoLink="email"
同样你也可以做网站
android:autoLink="web"
另外,如果你想设置文本颜色,你可以在属性下面
android:textColorLink="@color/email_text_color"
【讨论】:
在 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
【讨论】:
您可以使用 Kotlin 扩展并输入您自己的 drawUnderLine 方法。
fun TextView.drawUnderLine() {
val text = SpannableString(this.text.toString())
text.setSpan(UnderlineSpan(), 0, text.length, 0)
this.text = text
}
yourTextView.drawUnderLine()
【讨论】:
5 Amazing Ways To Underline A TextView In Android - Kotlin/Java & XML
String html = "<u>Underline using Html.fromHtml()</u>";
textview.setText(Html.fromHtml(html));但 Html.fromHtml(String resource) 在 API 24 中已被弃用。
所以你可以使用最新的android支持库androidx.core.text.HtmlCompat。在此之前,您需要在项目中包含依赖项。
`implementation 'androidx.core:core:1.0.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、
<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
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);`
【讨论】:
一个简单且可持续的解决方案是创建一个图层列表并将其作为 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>
【讨论】:
如果您的 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>
【讨论】:
在 TextView 中有三种方式为文本添加下划线。
setPaintFlags(); 的 TextView
让我向您解释所有方法:
第一种方法
对于 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"));
【讨论】:
Html.fromHtml("<u>This text will be underlined</u>"),但我不得不承认我更喜欢使用 SpannableStrings。 @Kartik:您不妨在文本上使用StrikethroughSpan 来创建删除线效果。 :)
对于仍在查看此问题的任何人。这是一个超链接,但您可以将其修改为一个简单的下划线:
创建一个可绘制对象(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"/>
【讨论】:
只需在你的 string.xml 资源文件中用 标签包围你的文本
<string name="your_string"><u>Underlined text</u></string>
在你的活动/片段中
mTextView.setText(R.string.your_string);
【讨论】:
textView.setText(getString(R.string.text)) 。 对: textView.setText(getText(R.string.text)) 或只是 textView.setText(R.string.text)。原因在于getText() 返回带有下划线跨度的Spannable,但如果您使用getString(),它会将Spannable 转换为String 生成的跨度将被删除。
它对我有用。
tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
【讨论】: