TextView ClickableSpan

975 阅读1分钟

自定义ClickableSpan


/**
 * 为富文本提供点击事件
 */
public class Clickable extends ClickableSpan implements View.OnClickListener {
    private final View.OnClickListener mListener;

    public Clickable(View.OnClickListener listener) {
        mListener = listener;
    }

    @Override
    public void onClick(View view) {
        if(mListener!=null){
            mListener.onClick(view);    
        }
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        super.updateDrawState(ds);
        ds.setUnderlineText(false);
        ds.clearShadowLayer();
    }
}

使用

View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent Intent = new Intent(ACTION_DIAL, Uri.parse("tel:" + phoneNumber));//跳转到拨号界面,同时传递电话号码
                startActivity(Intent);
            }
        };

        //先设置点击,再设置颜色
        span.setSpan(new Clickable(listener), source.length(), span.length(), SpannableString.SPAN_MARK_MARK);
        span.setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.themColor)), source.length(), span.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE);
        des.setText(span);
        des.setMovementMethod(LinkMovementMethod.getInstance());//使点击生效
        des.setHighlightColor(getContext().getResources().getColor(R.color.themColor));//设置点击时的高亮背景色