同一TextView中如何做到多处可点击呢,这里我们用到 ClickableSpan类来帮助我们,下面是一个简易的例子。
首先我们继承ClickableSpan类,写一个自定义的Span
import android.support.annotation.ColorInt; import android.text.TextPaint; import android.view.View; public class MyClickableSpan extends android.text.style.ClickableSpan { private View.OnClickListener listener; private int color; public MyClickableSpan(@ColorInt int color, View.OnClickListener listener) { this.listener = listener; this.color = color; } @Override public void onClick(View widget) { listener.onClick(widget); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); ds.setColor(color); } }然后包装一个方法,以便我们多次使用
private SpannableString setClickableSpan(SpannableString sp, View.OnClickListener l, String str, String span) { sp.setSpan( new MyClickableSpan(0xff1c91ea, l), str.indexOf(span), str.indexOf(span) + span.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return sp; } 讲解一下颜色参数,1c91ea是蓝色,0x是十六进制的意思,ff是透明度
好了,开始使用(在onCreate中)
String str = "本人已阅读并同意签署《借款合同》、《平台服务协议》和《代办服务协议》"; SpannableString sp = new SpannableString(str); setClickableSpan(sp, new View.OnClickListener() { @Override public void onClick(View v) { if (!TextUtils.isEmpty(loanContractUrl_)) { //TODO 跳转页面 } } }, str, "《借款合同》"); setClickableSpan(sp, new View.OnClickListener() { @Override public void onClick(View v) { if (!TextUtils.isEmpty(flatAgreementUrl_)) { //TODO 跳转页面 } } }, str, "《平台服务协议》"); setClickableSpan(sp, new View.OnClickListener() { @Override public void onClick(View v) { if (!TextUtils.isEmpty(commissionUrl_)) { //TODO 跳转页面 } } }, str, "《代办服务协议》"); tx_protocol = (TextView) findViewById(R.id.tx_protocol); tx_protocol.setText(sp); tx_protocol.setMovementMethod(LinkMovementMethod.getInstance()); 最后一行一定要加上哦,不然点不了。代码比较简单,我就不上图了~