Android做注册功能或者其他功能时,一般会需要在一个TextView中,加入多个可以点击的区域,例如下图中的《用户协议》和《隐私政策》,需要有点击事件:
image.png
很多人会做多个Textview拼接起来,这样其实很麻烦,其实使用一个Android 自带的功能就可以做了。如下:
String str = "注册即代表已阅读并遵循《用户协议》和《隐私政策》";
SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append(str);
final int start = str.indexOf("《");//第一个出现的位置
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(mContext, "《用户协议》",
Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(getResources().getColor(R.color.text_click_blue)); //设置文件颜色
// 去掉下划线
ds.setUnderlineText(false);
}
}, start, start + 6, 0);
final int end = str.lastIndexOf("《");//最后一个出现的位置
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(mContext, "《隐私政策》",
Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(getResources().getColor(R.color.text_click_blue)); //设置文子颜色
// 去掉下划线
ds.setUnderlineText(false);
}
}, end, end + 6, 0);
textview.setMovementMethod(LinkMovementMethod.getInstance());//加上这句话才有效果
textview.setText(ssb, TextView.BufferType.SPANNABLE);//加上这句话才有效果
textview.setHighlightColor(ContextCompat.getColor(this,R.color.touming));//去掉点击后的背景颜色为透明
网友评论