SpannableString之ClickableSpan笔记

TextView useInfo = (TextView) findViewById(R.id.info); String url_text = "用户协议及隐私条款"; useInfo.setText("开始即表示您同意遵守"); SpannableString spStr = new SpannableString(url_text); spStr.setSpan(new ClickableSpan() { @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(Color.WHITE); //设置文字颜色 ds.setUnderlineText(true); //设置下划线,默认有下划线 }@Override public void onClick(View widget) { Log.d("", "onTextClick........"); } }, 0, url_text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置点击后的背景颜色为透明,否则会一直出现高亮(需要在代码里设置,xml里设置有时无效) useInfo.setHighlightColor(Color.TRANSPARENT); useInfo.append(spStr); useInfo.setMovementMethod(LinkMovementMethod.getInstance()); //开始响应点击事件

如果还需为文字设置点击的selector效果,可在xml中为该TextView添加属性:

android:textColorLink="@drawable/selector_textcolor"



【SpannableString之ClickableSpan笔记】在 setSpan() 时需要指定 flag,它是用来标识在 Span 范围内的文本前后输入新的字符时是否对它们也应用这个效果。分别有:
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)
Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)
Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)
Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括)
看个截图就更明白了:

SpannableString之ClickableSpan笔记
文章图片

对比一下
SpannableString之ClickableSpan笔记
文章图片

    推荐阅读