Implementé una solución que, en mi opinión, es más elegante. He hecho un personalizado TextView
. De esta forma no es necesario ejecutar código adicional para cada TextView
con hipervínculos.
package com.example.view;
import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.URLSpan;
import android.util.AttributeSet;
import com.example.utils.UrlSpanNoUnderline;
public class TextViewNoUnderline extends AppCompatTextView {
public TextViewNoUnderline(Context context) {
this(context, null);
}
public TextViewNoUnderline(Context context, AttributeSet attrs) {
this(context, attrs, android.R.attr.textViewStyle);
}
public TextViewNoUnderline(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setSpannableFactory(Factory.getInstance());
}
private static class Factory extends Spannable.Factory {
private final static Factory sInstance = new Factory();
public static Factory getInstance() {
return sInstance;
}
@Override
public Spannable newSpannable(CharSequence source) {
return new SpannableNoUnderline(source);
}
}
private static class SpannableNoUnderline extends SpannableString {
public SpannableNoUnderline(CharSequence source) {
super(source);
}
@Override
public void setSpan(Object what, int start, int end, int flags) {
if (what instanceof URLSpan) {
what = new UrlSpanNoUnderline((URLSpan) what);
}
super.setSpan(what, start, end, flags);
}
}
}
Y código para UrlSpanNoUnderline:
package com.jankstudios.smmagazine.utils;
import android.text.TextPaint;
import android.text.style.URLSpan;
public class UrlSpanNoUnderline extends URLSpan {
public UrlSpanNoUnderline(URLSpan src) {
super(src.getURL());
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}
Esta solución supone que el texto de la amplitud es la misma que la URL el caso de un enlace http: // básico. Sin embargo, Linkify es inteligente y convierte un número de teléfono como (212) 555-1212 en la URL 'tel: 2125551212'. La llamada 'nueva URLSpanNoUnderline' se debe pasar' span.getURL() 'para retener esta información, de lo contrario generará enlaces defectuosos que causen excepciones cuando se haga clic. He colocado esta solución propuesta en la cola de edición para su respuesta, ya que no tengo permisos de edición. –
Saludos Mike. Aprobé tu edición, la primera vez que * he visto * ese diálogo de edición, espero que haya funcionado. –
¿Qué significa "texto del lapso igual a la URL"? –