Deseamos brindarte la mejor respuesta que hemos encontrado online. Queremos que te resulte de utilidad y si puedes comentarnos algún detalle que nos pueda ayudar a mejorar siente la libertad de hacerlo..
Solución:
Puede hacerlo en código buscando y reemplazando el URLSpan
instancias con versiones que no subrayan. Después de llamar Linkify.addLinks()
llama a la función stripUnderlines()
pegado a continuación en cada uno de sus TextView
s:
private void stripUnderlines(TextView textView)
Spannable s = new SpannableString(textView.getText());
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span: spans)
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
s.removeSpan(span);
span = new URLSpanNoUnderline(span.getURL());
s.setSpan(span, start, end, 0);
textView.setText(s);
Esto requiere una versión personalizada de URLSpan que no habilite la propiedad “subrayado” de TextPaint:
private class URLSpanNoUnderline extends URLSpan
public URLSpanNoUnderline(String url)
super(url);
@Override public void updateDrawState(TextPaint ds)
super.updateDrawState(ds);
ds.setUnderlineText(false);
Dada una vista de texto y contenido:
TextView textView = (TextView) findViewById(R.id.your_text_view_id);
String content = "your html content";
Aquí hay una forma concisa de eliminar los subrayados de los hipervínculos:
Spannable s = (Spannable) Html.fromHtml(content);
for (URLSpan u: s.getSpans(0, s.length(), URLSpan.class))
s.setSpan(new UnderlineSpan()
public void updateDrawState(TextPaint tp)
tp.setUnderlineText(false);
, s.getSpanStart(u), s.getSpanEnd(u), 0);
textView.setText(s);
Esto se basa en el enfoque sugerido por robUx4.
Para poder hacer clic en los enlaces, también debe llamar a:
textView.setMovementMethod(LinkMovementMethod.getInstance());
UnderlineSpan
ya existe, pero solo puede establecer el subrayado.
Otra solución es agregar un lapso sin subrayar en cada uno existente URLSpan
. Por lo tanto, el estado de subrayado se desactiva justo antes de pintar. De esta manera mantienes tu URLSpan
Clases (posiblemente personalizadas) y todos los demás estilos establecidos en otros lugares.
public class NoUnderlineSpan extends UnderlineSpan
public NoUnderlineSpan()
public NoUnderlineSpan(Parcel src)
@Override
public void updateDrawState(TextPaint ds)
ds.setUnderlineText(false);
Así es como lo configura sin eliminar el objeto URLSpan existente:
URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);
for (URLSpan span: spans)
int start = s.getSpanStart(span);
int end = s.getSpanEnd(span);
NoUnderlineSpan noUnderline = new NoUnderlineSpan();
s.setSpan(noUnderline, start, end, 0);
Te mostramos las comentarios y valoraciones de los lectores
Si entiendes que te ha resultado provechoso este artículo, nos gustaría que lo compartas con el resto juniors y nos ayudes a dar difusión a esta información.