如何在Android布局xml文件中定义带下划线的文本?


#1楼

Strings.xml文件内容:

<resource><string name="my_text">This is an <u>underline</u>.</string>
</resources>

布局xml文件存储区将上述字符串资源与textview的以下属性一起使用,如下所示:

<TextView android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:text="@string/my_text"android:selectAllOnFocus="false"android:linksClickable="false"android:autoLink="all"/>

#2楼

您可以尝试

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

#3楼

我在使用自定义字体时遇到了问题,使用资源文件技巧( <u>Underlined text</u> )创建的<u>Underlined text</u>确实可以正常工作,但是Android设法将下划线转换为某种罢工槽。

我自己使用以下答案在textview下方绘制边框: https ://stackoverflow.com/a/10732993/664449。 显然,这不适用于部分带下划线的文本或多行文本。


#4楼

我知道这是一个较晚的答案,但是我想出了一个效果很好的解决方案...我从Anthony Forloney那里得到答案,因为它在代码中加了下划线,并创建了TextView的子类来为您处理该问题。 然后,只要您想使用带下划线的TextView,就可以仅使用XML中的子类。

这是我创建的类:

import android.content.Context;
import android.text.Editable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;
import android.widget.TextView;/*** Created with IntelliJ IDEA.* User: Justin* Date: 9/11/13* Time: 1:10 AM*/
public class UnderlineTextView extends TextView
{private boolean m_modifyingText = false;public UnderlineTextView(Context context){super(context);init();}public UnderlineTextView(Context context, AttributeSet attrs){super(context, attrs);init();}public UnderlineTextView(Context context, AttributeSet attrs, int defStyle){super(context, attrs, defStyle);init();}private void init(){addTextChangedListener(new TextWatcher(){@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after){//Do nothing here... we don't care}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count){//Do nothing here... we don't care}@Overridepublic void afterTextChanged(Editable s){if (m_modifyingText)return;underlineText();}});underlineText();}private void underlineText(){if (m_modifyingText)return;m_modifyingText = true;SpannableString content = new SpannableString(getText());content.setSpan(new UnderlineSpan(), 0, content.length(), 0);setText(content);m_modifyingText = false;}
}

现在...每当您想用XML创建带下划线的textview时,只需执行以下操作:

<com.your.package.name.UnderlineTextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:gravity="center"android:text="This text is underlined"android:textColor="@color/blue_light"android:textSize="12sp"android:textStyle="italic"/>

我在此XML代码段中添加了其他选项,以表明我的示例可以更改文本的颜色,大小和样式。

希望这可以帮助!


#5楼

如果使用的字符串资源 xml文件支持HTML标签,如<b></b><i></i><u></u>

<resources><string name="your_string_here">This is an <u>underline</u>.</string>
</resources>

如果要在代码中加下划线,请使用:

TextView textView = (TextView) view.findViewById(R.id.textview);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
textView.setText(content);

#6楼

试试这个代码

在XML中

<resource><string name="my_text"><![CDATA[This is an <u>underline</u>]]></string>
</resources>

在代码中

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.my_text)));

祝好运!


#7楼

一线解决方案

myTextView.setText(Html.fromHtml("<p><u>I am Underlined text</u></p>"));

时间有点晚,但对某人可能有用。


#8楼

对于Button和TextView,这是最简单的方法:

按键:

Button button = (Button) findViewById(R.id.btton1);
button.setPaintFlags(button.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

文字检视:

TextView textView = (TextView) findViewById(R.id.textview1);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

#9楼

Romain Guy在媒体上描述了绘制带下划线的文本的最新方法,并在GitHub上提供了源代码。 此示例应用程序公开了两种可能的实现:

  • 需要API级别19的基于路径的实现
  • 基于区域的实现,需要API级别1


#10楼

我使用此xml drawable创建底边框,并将该drawable作为背景应用于我的textview

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item><shape android:shape="rectangle" ><solid android:color="@android:color/transparent" /></shape></item><item android:top="-5dp" android:right="-5dp" android:left="-5dp"><shape><solid android:color="@android:color/transparent" /><strokeandroid:width="1.5dp"android:color="@color/pure_white" /></shape></item>
</layer-list>

#11楼

xml中的一种简单而灵活的解决方案:

<Viewandroid:layout_width="match_parent"android:layout_height="3sp"android:layout_alignLeft="@+id/your_text_view_need_underline"android:layout_alignRight="@+id/your_text_view_need_underline"android:layout_below="@+id/your_text_view_need_underline"android:background="@color/your_color" />

#12楼

查看强调的可点击按钮样式:

<TextViewandroid:id="@+id/btn_some_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/btn_add_contact"android:textAllCaps="false"android:textColor="#57a0d4"style="@style/Widget.AppCompat.Button.Borderless.Colored" />

strings.xml:

<string name="btn_add_contact"><u>Add new contact</u></string>

结果:


#13楼

  1. 转到strings.xml资源文件
  2. 必要时在带有HTML下划线标记的资源文件中添加一个字符串。

strings.xml HTML下划线示例

  1. 如下所示在Java代码中调用字符串资源ID:
 sampleTextView.setText(R.string.sample_string); 
  1. 输出应在单词“ Stackoverflow”下划线。

此外,以下代码将不会显示下划线:

String sampleString = getString(R.string.sample_string);
sampleTextView.setText(sampleString);

而是,使用以下代码保留富文本格式:

CharSequence sampleString = getText(R.string.sample_string);
sampleTextView.setText(sampleString);

“您可以使用getString(int)或getText(int)检索字符串。getText(int)保留应用于该字符串的任何富文本样式。” Android文档。

请参阅文档: https : //developer.android.com/guide/topics/resources/string-resource.html

我希望这有帮助。


#14楼

只需在字符串资源文件中使用属性,例如

<string name="example"><u>Example</u></string>

#15楼

一种更清洁的方式,而不是
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 方法是使用textView.getPaint().setUnderlineText(true);

而且,如果您以后需要关闭该视图的下划线,例如在RecyclerView的重用视图中,则textView.getPaint().setUnderlineText(false);


#16楼

我简化了塞缪尔的回答:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><!--https://stackoverflow.com/a/40706098/4726718--><itemandroid:left="-5dp"android:right="-5dp"android:top="-5dp"><shape><strokeandroid:width="1.5dp"android:color="@color/colorAccent" /></shape></item>
</layer-list>

#17楼

我轻松创建了此方法

TextView tv = findViewById(R.id.tv);
tv.setText("some text");

下划线整个TextView

setUnderLineText(tv, tv.getText().toString());

在TextView的下划线

setUnderLineText(tv, "some");

还支持TextView子项,例如EditText,Button,Checkbox

public void setUnderLineText(TextView tv, String textToUnderLine) {String tvt = tv.getText().toString();int ofe = tvt.indexOf(textToUnderLine, 0);UnderlineSpan underlineSpan = new UnderlineSpan();SpannableString wordToSpan = new SpannableString(tv.getText());for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {ofe = tvt.indexOf(textToUnderLine, ofs);if (ofe == -1)break;else {wordToSpan.setSpan(underlineSpan, ofe, ofe + textToUnderLine.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);}}}

在这里检查我的答案以使可点击的下划线文本或TextView的多个部分下划线


#18楼

在Kotlin中可以使用扩展功能 。 这只能从代码中使用,不能从xml中使用。

fun TextView.underline() {paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
}

用法:

 tv_change_number.underline()tv_resend_otp.underline()

#19楼

另一个解决方案是创建一个扩展TextView的自定义视图,如下所示

public class UnderLineTextView extends TextView {public UnderLineTextView(Context context) {super(context);this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);}public UnderLineTextView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);}}

并添加到xml,如下所示

<yourpackage.UnderLineTextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="underline text"/>

#20楼

票数最高的答案是正确和最简单的。 但是,有时您可能会发现该字体不适用于某些字体,而适用于其他字体。(这是我在处理中文时遇到的一个问题。)

解决方法是不要仅对TextView使用“ WRAP_CONTENT”,因为没有多余的空间来绘制线条。 您可以将固定高度设置为TextView,或将android:paddingVertical与WRAP_CONTENT一起使用。


#21楼

HtmlCompat.fromHtml(String.format(context.getString(R.string.set_target_with_underline)),HtmlCompat.FROM_HTML_MODE_LEGACY)
<string name="set_target_with_underline">&lt;u>Set Target&lt;u> </string>

注意xml文件中的转义符号


#22楼

在“接受”的答案以上工作(当您尝试使用像串textView.setText(Html.fromHtml(String.format(getString(...), ...)))

如文档中所述,您必须使用&lt;转义(标记为html实体的html)内部标签的右括号&lt; ,例如结果应如下所示:

<resource><string name="your_string_here">This is an &lt;u>underline&lt;/u>.</string>
</resources>

然后,可以在代码中设置以下内容:

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));

我可以在Android版式中加下划线吗?相关推荐

  1. Java1.7 int 中加下划线

    2019独角兽企业重金招聘Python工程师标准>>> 看到 okhttp源码中默认超时设为10_000, 以前没注意过,所以特别去查了下. 原来是java1.7 的新规范 下面是举 ...

  2. mysql 表名 下划线_我们可以在MySQL表名中加下划线吗?

    您不能在表名称中添加下划线.如果您仍想使用下划线创建新表,请使用反引号(而不是单引号)将其引起来. 但是,让我们首先尝试在带下划线的表名周围设置引号.以下是一个例子-mysql> create  ...

  3. java int 带下划线,Java-int 中加下划线

    java1.7 新规范, 可以在数值内加下划线,以增强可读性 1. 不能在数值的前和后加下划线 2. 不能在小数点前后加下划线 3. 不能在多个连续非数值数字间加下划线(避免在非数值数字前后加下划线) ...

  4. 怎样在oracle中加下划线,Oracle使用like查询时对下划线的处理方法

    如:查询ZJ_STANDARD_ITEM表的name1字段包含"_("的数据 --以下的查询语句执行会发现所查询的数据并不是我们想要数据 select * from ZJ_STAN ...

  5. 在html中加下划线

    方法一:用<u></u>标签 方法二:用text-decoration:underline; 方法三:用border:1px solid;        padding:5px ...

  6. java 英文数字下划线_为什么Java7开始在数字中使用下划线

    JDK1.7的发布已经介绍了一些有用的特征,尽管大部分都是一些语法糖,但仍然极大地提高了代码的可读性和质量.其中的一个特征是介绍字面常量数字的下划线.从Java7开始,你就可以在你的Java代码里把长 ...

  7. java 数字 下划线_数字文字中的下划线– Java 7功能

    java 数字 下划线 One of the Java 7 features is underscores in numeric literals. You can place underscores ...

  8. java能下划线开头_为什么Java7开始在数字中使用下划线

    JDK1.7的发布已经介绍了一些有用的特征,尽管大部分都是一些语法糖,但仍然极大地提高了代码的可读性和质量.其中的一个特征是介绍字面常量数字的下划线.从Java7开始,你就可以在你的Java代码里把长 ...

  9. Android中layout目录的作用,Android 开发中layout下的子文件夹

    Android 开发中layout下的子文件夹 发布时间:2020-10-25 11:42:36 来源:脚本之家 阅读:71 作者:厚土火焰山 如果一个项目内有很多个界面,那么在layout下会有太多 ...

最新文章

  1. 国内最优秀的Leangoo敏捷项目协作工具
  2. 分段路由SR应用场景—Vecloud
  3. Python 实现猜年龄小游戏
  4. html流动布局,自适应css布局——流动布局新时代
  5. python execute_command err_Python management.execute_from_command_line方法代碼示例
  6. 光流(六)--L2范数Horn–Schunck 光流法及应用demo
  7. webtrends 分析
  8. python抓取网易云音乐评论_Python 爬取网易云音乐评论
  9. 淘宝客如何赚钱?为什么很多人做淘宝客赚不到钱?
  10. IDEA加载文件:系统找不到指定文件
  11. git for Mac安装(包含客户端软件Github Desktop的安装配置)
  12. i2c 驱动五:gpio模拟i2c
  13. php qq登陆网站实例代码,QQ登陆网站实例代码
  14. 系统从win7更新到win10没有声音(扬声器一直显示未插入)
  15. Win10中使用CMD命令遍历文件夹删除重复文件
  16. postgresql计算两点距离
  17. 计算空间点到平面的投影点坐标
  18. HDLBits-Lemmings4
  19. 美国服务器如何抵御黑客攻击
  20. Java之UML类图的六种关系

热门文章

  1. Android aidl 正确使用 callback的方式
  2. 形象生动的SpringBoot和SpringMVC的区别
  3. Jquery基本知识点的总结
  4. 谈谈对Kafka Accumulator的理解
  5. (0095)iOS开发之本地文件预览的三种方法(3)
  6. springboot项目层次结构_Spring Boot 默认的指标数据从哪来的?
  7. python软件在下载库文件_python – 并行下载多个文件的库或工具
  8. (转)angular进行md5加密 base64加密 哈希加密
  9. 一次SQLSERVER触发器编写感悟
  10. Error 错误: 找不到或无法加载主类