您如何在Android XML中加下划线?


Answers:


174

如果您使用的是字符串资源的XML文件(支持HTML标签),这是可以做到用<b> </b><i> </i><u> </u>

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

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

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

希望这可以帮助


9
我尝试过了 字符串不带下划线?
Michael Zeuner 2012年

5
我遇到过以下情况,即通过<u>标记的基础不起作用,例如,有时如果您使用的是自定义字体。但是,以编程方式为基础UnderlineSpan的确确实对我没有失败,因此,我建议将其作为最可靠的解决方案。
Giulio Piancastelli 2014年

您无需使用Java设置文本。只需在XML中使用<u><\u>就足够了。
Maksim Dmitriev 2014年

9
就我而言,Android Studio预览无法确定html标签。但是一旦我在真实设备中运行该项目,带下划线的文本就会愉快地显示出来。
Alvin 2015年

1
<whine>考虑到我们使用Android已有5年以上了,必须在Google已经给我们加粗/斜体/正常
字体

57

用这个:

TextView txt = (TextView) findViewById(R.id.Textview1);
txt.setPaintFlags(txt.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

请注意,此解决方案始终在整个文本下划线,因此,如果只想在部分文本下划线,则不可行。为此,您需要UnderlineSpan
Giulio Piancastelli

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

如果不起作用,那么

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

因为“ <”有时可能是关键字。

和用于显示

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

3
这行得通...但是如果由于某种原因将TextView设置为使用xml属性android:textAllCaps =“ true”,则不会出现下划线。删除此修饰符,下划线将按预期显示。请注意:)
Matt W

5

首先,转到String.xml文件

您可以在此处添加任何HTML属性,例如,斜体,粗体或下划线。

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

3

另一种方法是创建一个扩展TextView的自定义组件。这对于需要多个带下划线的TextView的情况非常有用。

这是组件的代码:

package com.myapp.components;

import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;

public class LinkTextView extends AppCompatTextView {
    public LinkTextView(Context context) {
        this(context, null);
    }

    public LinkTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        SpannableString content = new SpannableString(text);
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);

        super.setText(content, type);
    }
}

以及如何在xml中使用它:

<com.myapp.components.LinkTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World!" />


2

您可以使用下面的标记,但是请注意,如果将设置textAllCapstrue下划线,则效果将被删除。

<resource>
    <string name="my_string_value">I am <u>underlined</u>.</string>
</resources>


注意

使用textAllCaps和包含标记的字符串(login_change_settings);大写转换将删除标记

textAllCaps文本转换最终将在CharSequence上调用toString,其最终效果是删除了诸如的任何标记。此检查查找包含标记的字符串的用法,这些标记还指定textAllCaps = true。


2

有多种方法可以在Android TextView中获得带下划线的文本。

1. <u>This is my underlined text</u>

I just want to underline <u>this</u> word

2.您可以通过编程进行相同的操作。

`textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);`

3,可以通过创建SpannableString然后将其设置为TextView文本属性来完成

SpannableString text = new SpannableString("Voglio sottolineare solo questa parola");
text.setSpan(new UnderlineSpan(), 25, 6, 0);
textView.setText(text);

2

我使用下面的方法,它为我工作。以下是Button的示例,但我们也可以在TextView中使用。

Button btnClickMe = (Button) findViewById(R.id.btn_click_me);
btnClickMe.setPaintFlags(btnClickMe.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

1

如果要比较文本字符串或文本会动态变化,则可以在“约束”布局中创建一个视图,该视图将根据文本长度进行调整,如下所示

 <android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txt_Previous"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="8dp"
        android:gravity="center"
        android:text="Last Month Rankings"
        android:textColor="@color/colorBlue"
        android:textSize="15sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <View
        android:layout_width="0dp"
        android:layout_height="0.7dp"
        android:background="@color/colorBlue"
        app:layout_constraintEnd_toEndOf="@+id/txt_Previous"
        app:layout_constraintStart_toStartOf="@+id/txt_Previous"
        app:layout_constraintBottom_toBottomOf="@id/txt_Previous"/>


</android.support.constraint.ConstraintLayout>

0
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 tv = findViewById(R.id.tv);
tv.setText("some text");
setUnderLineText(tv, "some");

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

如果你想

-可点击的下划线文字?

-在TextView的多个部分下划线?

然后检查这个答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.