Como você sublinha um texto no Android XML?


Respostas:


174

Se você estiver usando um arquivo xml de recurso de string (suporta tags HTML), isso pode ser feito usando <b> </b>, <i> </i>e <u> </u>.

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

Se você quiser sublinhar algo do código, use:

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

Espero que isto ajude


9
Eu tentei isso. a string não sai sublinhada?
Michael Zeuner

5
Já encontrei casos em que subjacente por meio de <u>tags não funciona, por exemplo, às vezes, se você estiver usando uma fonte personalizada. No entanto, subjacente programaticamente por UnderlineSpanrealmente nunca falhou em mim, então eu o recomendaria como a solução mais confiável.
Giulio Piancastelli,

Você não precisa definir texto em Java. Basta usar <u>e <\u>em XML e é o suficiente.
Maksim Dmitriev

9
no meu caso, a visualização do android studio não foi capaz de determinar a tag html. mas uma vez que executei o projeto no dispositivo real, o texto sublinhado foi mostrado com alegria.
Alvin

1
<whine> o fato de você ter que converter uma string para HTML quando o Google já nos dá negrito / itálico / normal é uma folga, considerando que temos o Android há mais de 5 anos ... </whine>
angryITguy

57

Usa isto:

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

Esteja ciente de que esta solução sempre sublinha todo o texto, portanto, não é viável se quisermos sublinhar apenas uma parte dele. Para isso, você precisa UnderlineSpan.
Giulio Piancastelli,

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

Se não funcionar, então

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

Porque "<" pode ser uma palavra-chave em algum momento.

E para exibição

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

3
Isso funciona ... mas se por algum motivo você configurar o TextView para usar o atributo xml android: textAllCaps = "true", o sublinhado não aparecerá. Remova este modificador e o sublinhado aparecerá como pretendido. Apenas um aviso :)
Matt W

5

Em primeiro lugar, vá para o arquivo String.xml

você pode adicionar quaisquer atributos HTML como itálico, negrito ou sublinhado aqui.

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

3

Outra maneira de fazer isso é criar um componente personalizado que estende TextView. É bom para os casos em que você precisa ter vários TextViews sublinhados.

Este é o código do componente:

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);
    }
}

E como usá-lo em xml:

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


2

Você pode usar a marcação abaixo, mas observe que se você definir o textAllCapspara trueo efeito de sublinhado será removido.

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


Nota

Usando textAllCaps com uma string (login_change_settings) que contém marcação; a marcação será eliminada pela conversão de caps

A transformação de texto textAllCaps acabará chamando toString no CharSequence, o que tem o efeito de remover qualquer marcação, como. Esta verificação procura usos de strings contendo marcação que também especifica textAllCaps = true.


2

Existem diferentes maneiras de obter texto sublinhado em um Android TextView.

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

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

2. Você pode fazer o mesmo programaticamente.

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

3. Pode ser feito criando um SpannableString e, em seguida, definindo-o como a propriedade de texto TextView

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

2

Eu usei o método abaixo, funcionou para mim. Abaixo está um exemplo para Button, mas podemos usar em TextView também.

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

1

Se você quiser comparar o texto String ou o texto irá mudar dinamicamente então vocêpoderácriar uma visão no layout de Restrições que irá ajustar de acordo com o comprimento do texto como este

 <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);
            }
        }
    }

Maneira Mais Fácil

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

Também suporta childs TextView como EditText, Button, Checkbox

Se você quiser

- Texto de sublinhado clicável?

- Sublinha várias partes de TextView?

Então verifique esta resposta

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.