Android TextView 中的超链接去掉下划线自定义颜色自定义单击事件

先来一张图


Android TextView 中的超链接去掉下划线自定义颜色自定义单击事件_第1张图片
21554176304_.pic.jpg

布局代码


android:autoLink="all" 也是没问题的
下面是工具类代码 直接拿去用就行

public class NoUnderlineSpan extends URLSpan {
    private int color;
    public NoUnderlineSpan(String url, @ColorRes int color,Context context) {
        super(url);
        this.color = context.getResources().getColor(color);
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        if (ds != null) {
            if (color == 0) {
                ds.setColor(ds.linkColor);
            } else {
                ds.setColor(color);
            }
            ds.setUnderlineText(false);
        }
    }

    public static void setSpan(TextView mText, @ColorRes int color) {
        URLSpan[] urlSpans = (((Spannable) mText.getText()).getSpans(0, mText.getText().length() - 1, URLSpan.class));
        for (URLSpan urlSpan : urlSpans) {
            String url = urlSpan.getURL();
            int start = ((Spannable) mText.getText()).getSpanStart(urlSpan);
            int end = ((Spannable) mText.getText()).getSpanEnd(urlSpan);
            NoUnderlineSpan noUnderlineSpan = new NoUnderlineSpan(url, color,mText.getContext());
            Spannable s = (Spannable) mText.getText();
            //需要重写onClick 时则添加
            //s.removeSpan(urlSpan); //这里先移除原来的 span 不然自己重写的 onClick不好使
            s.setSpan(noUnderlineSpan, start, end, Spanned.SPAN_POINT_MARK);
        }
    }

    @Override
    public void onClick(View widget) {
        String url = getURL();
        //自定义点击处理逻辑//判断是url  email 等 也可以使用接口把事件传给调用的地方
    }
}

下面是如何使用 非常非常简单 Activity中代码

@ViewInject(layout = R.layout.activity_text_span)
public class TextSpanActivity extends BaseActivity {

    @BindView(R.id.text)
    TextView mText;

    @Override
    public void onCreate() {
        StringBuffer sb = new StringBuffer();
        sb.append("水纹珍簟思悠悠 \n\n");
        sb.append(" https://www.jianshu.com/u/ba2620cdd5d6 \n\n");
        sb.append("千里佳期一夕休\n\n");
        sb.append(" [email protected] \n\n");
        sb.append("从此无心爱良夜\n\n");
        sb.append("18888888888  \n\n");
        sb.append("任他明月下西楼");
        mText.setText(sb.toString());
        //TextVew  与 颜色
        NoUnderlineSpan.setSpan(mText,R.color.blue);
    }
}

结束了,希望能帮到你。

你可能感兴趣的:(Android TextView 中的超链接去掉下划线自定义颜色自定义单击事件)