Saltar al contenido

Eliminar el subrayado de los enlaces en TextView – Android

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 TextViews:

    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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *