Come sottolinei un testo in XML Android?


Risposte:


174

Se stai usando un file xml di risorse stringa (supporta tag HTML), puoi farlo usando <b> </b>, <i> </i>e <u> </u>.

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

Se vuoi sottolineare qualcosa dall'uso del codice:

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

Spero che questo ti aiuti


9
Ho provato questo. la stringa non viene sottolineata?
Michael Zeuner

5
Mi sono imbattuto in casi in cui i <u>tag sottostanti non funzionano, ad esempio a volte se si utilizza un carattere personalizzato. Tuttavia, il sottostante programmaticamente di non UnderlineSpanha mai fallito su di me, quindi lo consiglierei come la soluzione più affidabile.
Giulio Piancastelli

Non è necessario impostare il testo in Java. Usa <u>e <\u>in XML ed è sufficiente.
Maksim Dmitriev

9
nel mio caso, l'anteprima di Android Studio non è stata in grado di determinare il tag html. ma una volta eseguito il progetto nel dispositivo reale, il testo sottolineato è mostrato felicemente.
Alvin

1
<whine> il fatto che devi convertire una stringa in HTML quando Google ci fornisce già grassetto / corsivo / normale è un bel po 'lento considerando che abbiamo Android da oltre 5 anni ... </whine>
angryITguy

57

Usa questo:

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

Tieni presente che questa soluzione sottolinea sempre l'intero testo, quindi non è fattibile se si vuole sottolineare solo una parte di esso. Per questo, hai bisogno UnderlineSpan.
Giulio Piancastelli

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

Se non funziona allora

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

Perché "<" potrebbe essere una parola chiave in un dato momento.

E per la visualizzazione

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

3
Funziona ... ma se per qualche motivo imposti TextView per utilizzare l'attributo xml android: textAllCaps = "true", la sottolineatura non apparirà. Rimuovi questo modificatore e la sottolineatura verrà visualizzata come previsto. Solo un avvertimento :)
Matt W

5

Prima di tutto, vai al file String.xml

puoi aggiungere qualsiasi attributo HTML come, corsivo o grassetto o sottolineato qui.

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

3

Un altro modo per farlo è creare un componente personalizzato che estenda TextView. È utile per i casi in cui è necessario disporre di più TextView sottolineate.

Ecco il codice per il 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 come usarlo in xml:

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


2

È possibile utilizzare il markup di seguito, ma è da notare che se si imposta il textAllCapsper truel'effetto sottolineatura sarebbe stato rimosso.

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


Nota

Utilizzo di textAllCaps con una stringa (login_change_settings) che contiene markup; il markup verrà eliminato dalla conversione dei maiuscoli

La trasformazione del testo textAllCaps finirà per chiamare toString su CharSequence, che ha l'effetto netto di rimuovere qualsiasi markup come. Questo controllo cerca gli utilizzi delle stringhe contenenti markup che specificano anche textAllCaps = true.


2

Esistono diversi modi per ottenere il testo sottolineato in un TextView Android.

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

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

2. Puoi fare lo stesso a livello di programmazione.

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

3.Può essere fatto creando una SpannableString e quindi impostandola come proprietà di testo TextView

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

2

Ho usato il metodo di seguito, ha funzionato per me. Di seguito è riportato un esempio per Button, ma possiamo usarlo anche in TextView.

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

1

Se vuoi confrontare la stringa di testo o il testo cambierà dinamicamente allora puoi creare una vista nel layout Vincolo si adatterà in base alla lunghezza del testo in questo modo

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

Il modo più semplice

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

Supporta anche i figli TextView come EditText, Button, Checkbox

Se vuoi

- Sottolineato cliccabile?

- Sottolineare più parti di TextView?

Quindi controlla questa risposta

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.