2011-01-12 33 views

Respuesta

18

La solución más sencilla es probablemente para crear un componente UnderLineTextView a medida que deriva de Vista de Texto, anular setText() y poner todo el texto tal como se subraya, algo como esto (código de subrayado del enlace al que se refirió anteriormente):

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

} 

Es solo una ma tter de usar su nuevo componente en el diseño y configurar el texto como de costumbre. El resto se maneja automáticamente.

Más información sobre los componentes personalizados: http://developer.android.com/guide/topics/ui/custom-components.html

14

Puede subrayar el texto sobre Html.fromHtml(String source)

Ejemplo:

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

Simplest solution IMHO. – gnac

+0

Esto no funcionará porque no se escapa el corchete de apertura de las etiquetas '' y ''. Para ver el ejemplo correcto, consulte http://stackoverflow.com/a/9955051/425183 – Ognyan

+0

en verdad la solución más simple, txs – Hubert

1

También puede hacerlo a través del archivo de /res/values/string.xml si lo prefiere: Por ejemplo, en el que /res/values/string.xml podría añadir una entrada como:

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

Y luego, en el método onCreate (Bundle savedInstanceState) de su actividad, deberá añadir el siguiente código para causar "Crear cuenta"> que aparezca como se subraya en la interfaz de usuario que ha establecido para the createAccountText TextView que definió en el archivo xml en/res/layout/para su actividad:

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() resolvió mi problema, no sé por qué con 'textView.setText (getResources () .getString (R.string.string_id)); 'el texto no estaba subrayado. –

0

Peter3 escribió antes de extender la clase TextView y reemplazar el método setText.

Esta solución no funcionará como el método setText está marcado como FINAL.

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

No estoy seguro si el código podría funcionar con algunas modificaciones.

+0

El método que peter3 está anulando en su respuesta no es public void setText (CharSequence text) pero public void setText (CharSequence text, TextView.BufferType type). El método que peter3 está describiendo no es definitivo. (Un poco tarde para agregar el comentario, pero también tuve que mirar dos veces, así que pensé que valía la pena mencionarlo). – Stanley

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