2012-04-04 7 views
71

Come sottolinei un testo in un file XML? Non riesco a trovare un'opzione in textStyle.Come sottolinei un testo in Android XML?

+0

u avere provare a utilizzare 'style = "text-decoration: underline;"' –

+0

potrebbe dovresti in pieno come usarlo? –

+0

avete provato questo 'textView.setText (Html.fromHtml (" "+" testest "+" "));' –

risposta

114

Se si utilizza un file xml di risorsa stringa (supporta tag HTML), è possibile utilizzare <b> </b>, <i> </i> e <u> </u>.

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

Se si vuole sottolineare qualcosa da utilizzare il 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 aiuti

+5

Ho provato questo. la stringa non viene sottolineata? –

+0

puoi fornirmi un caso d'uso? –

+3

Ho riscontrato casi in cui il sottostante con i tag '' non funziona, ad es. a volte se si utilizza un carattere personalizzato. Tuttavia, il sottostante programmaticamente di "UnderlineSpan" non ha mai fallito con me, quindi lo raccomanderei come la soluzione più affidabile. –

17
<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 a un certo momento.

E per Visualizzazione

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

Funziona a meraviglia, grazie –

+1

Questo funziona ... ma se per qualche motivo si imposta TextView per utilizzare l'attributo xml android: textAllCaps = "true", la sottolineatura non verrà visualizzata. Rimuovi questo modificatore e la sottolineatura verrà visualizzata come previsto. Solo un avviso: –

40

Utilizzare questa:

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

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

+2

Questa è la risposta più elegante per sottolineare l'intera visualizzazione del testo – voghDev

2

Prima di tutto andare a String.xml file di

è possibile aggiungere qualsiasi attributi HTML come, corsivo o grassetto o sottolineato Qui.

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

Questa è stata già risposta sopra. – Shygar

0

ho usato sotto metodo, è un lavoro per me. di seguito è riportato un esempio per Button, ma possiamo utilizzarlo anche in TextView.

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

È possibile utilizzare il markup di seguito, ma è da notare che, se si imposta la textAllCaps al true l'effetto sottolineatura sarebbe stato rimosso.

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


Nota

Utilizzando textAllCaps con una stringa (login_change_settings) che contiene markup; il markup verrà eliminato dalla conversione delle maiuscole

La trasformazione di testo textAllCaps finirà per chiamare aString sul CharSequence, che ha l'effetto netto di rimuovere qualsiasi markup come. Questo controllo cerca usi di stringhe contenenti markup che specificano anche textAllCaps = true.

2

Un altro modo per farlo è la creazione di un componente personalizzato che estende TextView.È utile per i casi in cui è necessario disporre di più TextViews 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!" /> 
Problemi correlati