2011-01-12 14 views

risposta

18

La soluzione più semplice è probabilmente quello di creare un componente UnderLineTextView personalizzato derivante dal TextView, ignorare setText() e impostare l'intero testo come sottolineato, qualcosa di simile (sottolineare il codice dal link si di cui sopra):

@Override 
public void setText(CharSequence text, BufferType type) { 
    // code to check text for null omitted 
    SpannableString content = new SpannableString(text); 
    content.setSpan(new UnderlineSpan(), 0, text.length(), 0); 
    super.setText(content, BufferType.SPANNABLE); 

} 

E 'quindi solo un ma di usare il nuovo componente nel layout e di impostare il testo come al solito. Il resto viene gestito automaticamente.

Maggiori informazioni sui componenti personalizzati: http://developer.android.com/guide/topics/ui/custom-components.html

14

È possibile sottolineare il testo sopra Html.fromHtml(String source)

Esempio:

textView.setText(Html.fromHtml("this is <u>underlined</u> text")); 
+0

La soluzione più semplice IMHO. – gnac

+0

Questo non funzionerà perché la parentesi di apertura dei tag '' e '' non è sottoposta a escape. Per un esempio corretto, vedere http://stackoverflow.com/a/9955051/425183 – Ognyan

+0

soluzione più semplice, txs – Hubert

1

Si può anche fare questo tramite il file /res/values/string.xml, se si preferisce: ad esempio, nel /res/values/string.xml voi potrebbe aggiungere una voce del tipo:

<string name="createAccount"><u>Create Account</u></string> 

E poi nel metodo onCreate (Bundle savedInstanceState) della vostra attività si dovrebbe aggiungere il seguente codice per causare "Create account"> appaia come sottolineato nell'interfaccia utente che si imposta per il createAccountText TextView che hai definito nel file xml in/res/layout/per la tua attività:

TextView createAccountText = (TextView) findViewById(R.id.createAccountText); 
Resources res = getResources(); 
CharSequence styledText = res.getText(R.string.createAccount); 
createAccountText.setText(styledText, TextView.BufferType.SPANNABLE); 

Danny Remington - MacroSolve

+0

getResources(). GetText() risolto il mio problema, non so perché con un 'textView.setText (getResources () .getString (R.string.string_id)); 'il testo non è stato sottolineato. –

0

peter3 ha scritto prima di estendere la classe TextView e sovrascrivere il metodo setText.

Questa soluzione non funziona poiché il metodo setText è contrassegnato come FINALE.

http://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

Non sono sicuro se il codice potrebbe funzionare con alcune modifiche.

+0

Il metodo che peter3 sovrascrive nella sua risposta non è public final void setText (CharSequence text) ma public void setText (CharSequence text, TextView.BufferType type). Il metodo che peter3 sta descrivendo non è definitivo. (Un po 'tardi per aggiungere il commento, ma ho dovuto anche guardarlo due volte, quindi ho pensato che valesse la pena menzionarlo). – Stanley

0
SpannableString content = new SpannableString(name); 
content.setSpan(new UnderlineSpan(), 0, name.length(), 0); 
geometrical_textview.setText(content, TextView.BufferType.SPANNABLE); 
Problemi correlati